1.CREATE,數據的插入
創建一張學生表
mysql> create table student(
-> id int primary key comment '學生id',
-> name varchar(32) comment '學生姓名',
-> age int comment'學生年齡',
-> email varchar(32) comment '學生郵箱'
-> );
Query OK, 0 rows affected (0.60 sec)
- 單行數據+全列插入
--語法
insert into 表名 values(列1值,列2值,列3值);
mysql> insert into student values(1,'Alice',18,'[email protected]');
Query OK, 1 row affected (0.16 sec)
mysql> select * from student;
+----+-------+------+---------+
| id | name | age | email |
+----+-------+------+---------+
| 1 | Alice | 18 | [email protected] |
+----+-------+------+---------+
1 row in set (0.00 sec)
- 多行數據+全部列插入
--語法
insert into 表名 values(列1值,列2值,列3值),(列1值,列2值,列3值);
mysql> insert into student values(2,'Bob',18,'[email protected]'), (3,'Candy',18,'[email protected]');
Query OK, 2 rows affected (0.15 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from student;
+----+-------+------+---------+
| id | name | age | email |
+----+-------+------+---------+
| 1 | Alice | 18 | [email protected] |
| 2 | Bob | 18 | [email protected] |
| 3 | Candy | 18 | [email protected] |
+----+-------+------+---------+
3 rows in set (0.00 sec)
- 單行數據+指定列插入
--語法
insert into 表名(列1名,列2名)values(列1值,列2值);
mysql> insert into student(id,name)values(4,'Davis');
Query OK, 1 row affected (0.07 sec)
mysql> select * from student;
+----+-------+------+---------+
| id | name | age | email |
+----+-------+------+---------+
| 1 | Alice | 18 | [email protected] |
| 2 | Bob | 18 | [email protected] |
| 3 | Candy | 18 | [email protected] |
| 4 | Davis | NULL | NULL |
+----+-------+------+---------+
4 rows in set (0.00 sec)
- 多行數據+指定列插入
--語法
insert into 表名(列1名,列2名)values(列1值,列2值),(列1值,列2值);
mysql> insert into student(id,name)values(5,'Edsiom'),(6,'Frank');
Query OK, 2 rows affected (0.15 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from student;
+----+--------+------+---------+
| id | name | age | email |
+----+--------+------+---------+
| 1 | Alice | 18 | [email protected] |
| 2 | Bob | 18 | [email protected] |
| 3 | Candy | 18 | [email protected] |
| 4 | Davis | NULL | NULL |
| 5 | Edsiom | NULL | NULL |
| 6 | Frank | NULL | NULL |
+----+--------+------+---------+
6 rows in set (0.00 sec)
- 主鍵或者唯一鍵替換
在student表中,id是主鍵,不能重複,但是如果想要修改id爲1的學生的姓名應該如何操作
這種同步更新操作會先刪除原有數據,在進行新的插入,所以會有兩行受到影響
--語法
insert into 表名(列1,列2) values (列1值, 列2值) on duplicate key update 列1=列1值,列2=列2值;
mysql> insert into student(id,name)values(1,'Alice')on duplicate key update id =1,name='Amda';
Query OK, 2 rows affected (1.22 sec)
mysql> select * from student;
+----+--------+------+---------+
| id | name | age | email |
+----+--------+------+---------+
| 1 | Amda | 18 | [email protected] |
| 2 | Bob | 18 | [email protected] |
| 3 | Candy | 18 | [email protected] |
| 4 | Davis | NULL | NULL |
| 5 | Edsiom | NULL | NULL |
| 6 | Frank | NULL | NULL |
+----+--------+------+---------+
6 rows in set (0.00 sec)
- 替換:直接替換有主鍵衝突的數據
--語法 replace into 表名(列1,列2)values(列1值,列2值);
mysql> replace into student(id,name)values(1,'Alice'); Query OK, 2 rows affected (0.14 sec) mysql> select * from student; +----+--------+------+---------+ | id | name | age | email | +----+--------+------+---------+ | 1 | Alice | NULL | NULL | | 2 | Bob | 18 | [email protected] | | 3 | Candy | 18 | [email protected] | | 4 | Davis | NULL | NULL | | 5 | Edsiom | NULL | NULL | | 6 | Frank | NULL | NULL | +----+--------+------+---------+ 6 rows in set (0.00 sec)
2.RETRIEVE、查詢
創建學生成績表並插入數據得如下表
+----+-----------+------+---------+---------+
| id | name | math | chinese | english |
+----+-----------+------+---------+---------+
| 1 | 張三 | 54 | 32 | 88 |
| 2 | 李四 | 88 | 99 | 25 |
| 3 | 王五 | 55 | 99 | 88 |
| 4 | 張六六 | 48 | 96 | 32 |
| 5 | 趙四 | 74 | 68 | 87 |
| 6 | 周七 | 70 | 60 | 58 |
| 7 | 王八 | 99 | 98 | 95 |
+----+-----------+------+---------+---------+
查詢所有列
--語法
select * from 表名;
mysql> select * from score;
+----+-----------+------+---------+---------+
| id | name | math | chinese | english |
+----+-----------+------+---------+---------+
| 1 | 張三 | 54 | 32 | 88 |
| 2 | 李四 | 88 | 99 | 25 |
| 3 | 王五 | 55 | 99 | 88 |
| 4 | 張六六 | 48 | 96 | 32 |
| 5 | 趙四 | 74 | 68 | 87 |
| 6 | 周七 | 70 | 60 | 58 |
| 7 | 王八 | 99 | 98 | 95 |
+----+-----------+------+---------+---------+
7 rows in set (0.00 sec)
查詢指定列
--語法(不需要按照指定順序查詢)
select 列1,列2 from 表名;
--查詢學生姓名對應的語文成績和數學成績
mysql> select name,chinese,math from score;
+-----------+---------+------+
| name | chinese | math |
+-----------+---------+------+
| 張三 | 32 | 54 |
| 李四 | 99 | 88 |
| 王五 | 99 | 55 |
| 張六六 | 96 | 48 |
| 趙四 | 68 | 74 |
| 周七 | 60 | 70 |
| 王八 | 98 | 99 |
+-----------+---------+------+
7 rows in set (0.00 sec)
--查詢學生姓名對應的語文成績和數學成績
mysql> select name,chinese,math from score;
+-----------+---------+------+
| name | chinese | math |
+-----------+---------+------+
| 張三 | 32 | 54 |
| 李四 | 99 | 88 |
| 王五 | 99 | 55 |
| 張六六 | 96 | 48 |
| 趙四 | 68 | 74 |
| 周七 | 60 | 70 |
| 王八 | 98 | 99 |
+-----------+---------+------+
7 rows in set (0.00 sec)
查詢字段或表達式
--語法
select 表達式 as 新列名 from 表名; --as可以省略
--查詢學生姓名所對應的總成績
mysql> select name,math+chinese+english as total from score;
+-----------+-------+
| name | total |
+-----------+-------+
| 張三 | 174 |
| 李四 | 212 |
| 王五 | 242 |
| 張六六 | 176 |
| 趙四 | 229 |
| 周七 | 188 |
| 王八 | 292 |
+-----------+-------+
7 rows in set (0.10 sec)
結果去重
--語法
select distinct 列名 from 表名;
--查詢所有的不重複的語文成績
mysql> select distinct chinese from score;
+---------+
| chinese |
+---------+
| 32 |
| 99 |
| 96 |
| 68 |
| 60 |
| 98 |
+---------+
6 rows in set (0.02 sec)
條件查詢
--語法
查詢語句 where 查詢條件;
--查詢語文成績爲99或者數學成績爲48的同學信息
mysql> select * from score where chinese=99 or math=48;
+----+-----------+------+---------+---------+
| id | name | math | chinese | english |
+----+-----------+------+---------+---------+
| 2 | 李四 | 88 | 99 | 25 |
| 3 | 王五 | 55 | 99 | 88 |
| 4 | 張六六 | 48 | 96 | 32 |
+----+-----------+------+---------+---------+
3 rows in set (0.00 sec)
--查詢姓名爲三個字的學生信息
mysql> select * from score where name like'___';
+----+-----------+------+---------+---------+
| id | name | math | chinese | english |
+----+-----------+------+---------+---------+
| 4 | 張六六 | 48 | 96 | 32 |
+----+-----------+------+---------+---------+
1 row in set (0.02 sec)
--查詢語文成績小於等於數學成績的同學信息
mysql> select * from score where chinese<=math;
+----+--------+------+---------+---------+
| id | name | math | chinese | english |
+----+--------+------+---------+---------+
| 1 | 張三 | 54 | 32 | 88 |
| 5 | 趙四 | 74 | 68 | 87 |
| 6 | 周七 | 70 | 60 | 58 |
| 7 | 王八 | 99 | 98 | 95 |
+----+--------+------+---------+---------+
4 rows in set (0.00 sec)
--查詢總分高於150的分數,tips:在where中不允許使用別名
mysql> select math+chinese+english 總分 from score where math+chinese+english>150;
+--------+
| 總分 |
+--------+
| 174 |
| 212 |
| 242 |
| 176 |
| 229 |
| 188 |
| 292 |
+--------+
7 rows in set (0.00 sec)
結果排序(order by):ASC(升序,默認)DESC(降序)
--語法
查詢語句 order by 字段 desc/asc;
--按數學成績降序查詢學生信息
mysql> select * from score order by math desc;
+----+-----------+------+---------+---------+
| id | name | math | chinese | english |
+----+-----------+------+---------+---------+
| 7 | 王八 | 99 | 98 | 95 |
| 2 | 李四 | 88 | 99 | 25 |
| 5 | 趙四 | 74 | 68 | 87 |
| 6 | 周七 | 70 | 60 | 58 |
| 3 | 王五 | 55 | 99 | 88 |
| 1 | 張三 | 54 | 32 | 88 |
| 4 | 張六六 | 48 | 96 | 32 |
+----+-----------+------+---------+---------+
7 rows in set (0.00 sec)
按數學成績降序查詢姓張的同學的信息
mysql> select * from score where name like'張%' order by math desc;
+----+-----------+------+---------+---------+
| id | name | math | chinese | english |
+----+-----------+------+---------+---------+
| 1 | 張三 | 54 | 32 | 88 |
| 4 | 張六六 | 48 | 96 | 32 |
+----+-----------+------+---------+---------+
2 rows in set (0.00 sec)
分頁查詢
--語法
-- 從 0 開始,篩選 n 條結果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 從 s 開始,篩選 n 條結果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 從 s 開始,篩選 n 條結果,比第二種用法更明確,建議使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET n;
--插敘數學成績前三的同學信息
mysql> select * from score order by math desc limit 3 offset 0;
+----+--------+------+---------+---------+
| id | name | math | chinese | english |
+----+--------+------+---------+---------+
| 7 | 王八 | 99 | 98 | 95 |
| 2 | 李四 | 88 | 99 | 25 |
| 5 | 趙四 | 74 | 68 | 87 |
+----+--------+------+---------+---------+
3 rows in set (0.10 sec)
mysql> select * from score order by math desc limit 0,3;
+----+--------+------+---------+---------+
| id | name | math | chinese | english |
+----+--------+------+---------+---------+
| 7 | 王八 | 99 | 98 | 95 |
| 2 | 李四 | 88 | 99 | 25 |
| 5 | 趙四 | 74 | 68 | 87 |
+----+--------+------+---------+---------+
3 rows in set (0.00 sec)
mysql> select * from score order by math desc limit 3;
+----+--------+------+---------+---------+
| id | name | math | chinese | english |
+----+--------+------+---------+---------+
| 7 | 王八 | 99 | 98 | 95 |
| 2 | 李四 | 88 | 99 | 25 |
| 5 | 趙四 | 74 | 68 | 87 |
+----+--------+------+---------+---------+
3 rows in set (0.00 sec)
3.UPDATE、修改
--語法
update 表名 set 列名 = 新的列名;
--給張三同學的數學成績加五分
mysql> select * from score where name like '張三';
+----+--------+------+---------+---------+
| id | name | math | chinese | english |
+----+--------+------+---------+---------+
| 1 | 張三 | 54 | 32 | 88 |
+----+--------+------+---------+---------+
1 row in set (0.00 sec)
mysql> update score set math = math+10 where name like'張三';
Query OK, 1 row affected (0.07 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from score where name like '張三';
+----+--------+------+---------+---------+
| id | name | math | chinese | english |
+----+--------+------+---------+---------+
| 1 | 張三 | 64 | 32 | 88 |
+----+--------+------+---------+---------+
1 row in set (0.00 sec)
4.DELETE、刪除
--語法
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
--刪除張三同學的成績
mysql> select * from score where name like'張三';
+----+--------+------+---------+---------+
| id | name | math | chinese | english |
+----+--------+------+---------+---------+
| 1 | 張三 | 64 | 32 | 88 |
+----+--------+------+---------+---------+
1 row in set (0.00 sec)
mysql> delete from score where name like '張三';
Query OK, 1 row affected (0.19 sec)
mysql> select * from score where name like'張三';
Empty set (0.00 sec)
5.截斷表(truncate)和刪除表
--建立兩張一樣的表a和b,id自增長
mysql> create table a(
-> id int primary key auto_increment,
-> name varchar(32)
-> );
Query OK, 0 rows affected (1.88 sec)
mysql> insert into a (name)values('alice'),('bob');
Query OK, 2 rows affected (0.16 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from a;
+----+-------+
| id | name |
+----+-------+
| 1 | alice |
| 2 | bob |
+----+-------+
2 rows in set (0.00 sec)
mysql> create table b(
-> id int primary key auto_increment,
-> name varchar(32)
-> );
Query OK, 0 rows affected (0.63 sec)
mysql> insert into b (name)values('alice'),('bob');
Query OK, 2 rows affected (0.10 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from b;
+----+-------+
| id | name |
+----+-------+
| 1 | alice |
| 2 | bob |
+----+-------+
2 rows in set (0.00 sec)
--對錶a進行整表刪除,然後插入一條數據
mysql> delete from a;
Query OK, 2 rows affected (0.18 sec)
mysql> insert into a (name)values('cindy');
Query OK, 1 row affected (0.15 sec)
mysql> select * from a;
+----+-------+
| id | name |
+----+-------+
| 3 | cindy |
+----+-------+
1 row in set (0.00 sec)
可以看到,刪除整張表後id自增長是接着沒有刪除前的id繼續增長的
--對錶b進行截斷,然後插入數據
mysql> truncate b;
Query OK, 0 rows affected (0.97 sec)
mysql> insert into b (name)values('cindy');
Query OK, 1 row affected (0.16 sec)
mysql> select * from b;
+----+-------+
| id | name |
+----+-------+
| 1 | cindy |
+----+-------+
1 row in set (0.00 sec)
可以看到,id是重新進行了自增長
截斷表的特點:1.只能對整表操作;2.速度比delete快;3.重置auto_increment
6.數據庫中的聚合函數
count() 返回查詢到的數據的 數量
sum() 返回查詢到的數據的 總和,不是數字沒有意義
avg() 返回查詢到的數據的 平均值,不是數字沒有意義
max() 返回查詢到的數據的 最大值,不是數字沒有意義
min() 返回查詢到的數據的 最小值,不是數字沒有意義