常用基础 - 增删改查基本语句 ¶
作者:KK
发表日期:2017.5.23
插入数据记录 ¶
有了数据表后,这张表是空的,接下来我们要通过INSERT
语句往数据表插入数据:
/*建个学生表*/
CREATE TABLE student(
name VARCHAR(10),
gender TINYINT(1), /*性别 1=男 2=女*/
birthday DATE
);
/*插入一条学生数据*/
INSERT INTO student(name,gender,birthday) VALUES('Jay', 1, '1999-09-09');
/*再来一条,但这位学生没有出生,因为这位女同学不想透露*/
INSERT INTO student(name,gender) VALUES('May', 2);
总结:在INSERT INTO后面写表名,然后括号,括号里面是要插入数据的字段名称,后面再来个VALUES关键字加括号,括号就是与字段对应的数据值
基本的数据查询 ¶
紧接着上面,插入数据后就可以查询到数据了:
查询全部学生数据 ¶
SELECT * FROM student;
/*输出结果*/
+------+--------+------------+
| name | gender | birthday |
+------+--------+------------+
| Jay | 1 | 1999-09-09 |
| May | 2 | NULL |
+------+--------+------------+
其实SQL挺语义化的,有点像读英语句子一样,比较好记,FROM后面是表名哦
查询全部学生的名字 ¶
在SELECT后面明确声明指定的字段就行了
SELECT name FROM student;
/*输出结果*/
+------+
| name |
+------+
| Jay |
| May |
+------+
/*查询全部学生的名字和性别*/
SELECT name,gender FROM student;
/*输出结果*/
+------+--------+
| name | gender |
+------+--------+
| Jay | 1 |
| May | 2 |
+------+--------+
统计有多少条学生数据 ¶
SELECT count(*) FROM student;
/*输出结果*/
+----------+
| count(*) |
+----------+
| 2 |
+----------+
批量插入数据 ¶
可以一次性插入多条数据:
INSERT INTO student(name,gender,birthday) VALUES('Kay', 1, '1989-06-09'),('Mars', 2, '2000-02-02');
与基本的插入数据语句的区别就是VALUES后面加多个括号,其实每个括号里面的就是一条数据记录的各个值,后面还能加许多括号,自己试吧
带有条件的查询 ¶
查询男生有哪些同学
SELECT name FROM student WHERE gender = 1;
/*输出结果*/
+------+
| name |
+------+
| Jay |
| Kay |
+------+
就是在FROM 表名
后面加上个WHERE
关键字,关键字后面接着是字段名称和比较值,这样查询的时候MySQL就会比较一下哪条数据记录的gender值为1的,如果是1的话就符合,将数据提取出来
AND
查询逻辑 ¶
查询1999年之后出生的男同学的名字和出生时间:
SELECT name,birthday FROM student WHERE birthday > '1999-01-01' AND gender = 1;
/*结果*/
+------+------------+
| name | birthday |
+------+------------+
| Jay | 1999-09-09 |
+------+------------+
WHERE部分的含义解读就是:birthday大于1999年1月1号 并且
**性别 = 1(男)
OR
查询逻辑 ¶
查询性别为 女或者
1999年以后出生的同学:
SELECT * FROM student WHERE gender = 2 OR birthday > '1999-01-01';
/*结果*/
+------+--------+------------+
| name | gender | birthday |
+------+--------+------------+
| Jay | 1 | 1999-09-09 |
| May | 2 | NULL |
| Mars | 2 | 2000-02-02 |
+------+--------+------------+
常见的值比较符号示例 ¶
等于:
gender = 1
这个上面已经出现过几次了,废话一下不等于:
gender != 1
大于:
birthday > '1999-01-01'
小于:
birthday < '1999-01-01'
(怎么我感觉好水啊)大于等于:
birthday >= '1999-01-01'
小于等于:
birthday <= '1999-01-01'
指定文字开头:
name LIKE 'J%'
就是名字前面有J的人,后面的%表示任意内容,只要前面对上号就行
指定文字结尾:
name LIKE '%ay'
名字后面有ay的人
包含指定文字:
name LIKE '%a%'
就是名字任意位置有a的人,就算在最前面或最后面都可以
指定值:
gender IN(0,2)
于是gender不是0和2的记录都不要
范围:
birthday BETWEEN '1999-01-01' AND '2999-12-12'
这个要解释一下,意思就是说出生时间在1999年到2999年之间,涉及到BETWEEN关键字和AND关键字
值等于空:
birthday IS NULL
值不为空:
birthday IS NOT NULL
(下面有例子)
基本排序 ¶
/*把同学们按年龄从大到小排出来*/
SELECT * FROM student ORDER BY birthday ASC;
/*结果*/
+------+--------+------------+
| name | gender | birthday |
+------+--------+------------+
| May | 2 | NULL |
| Kay | 1 | 1989-06-09 |
| Jay | 1 | 1999-09-09 |
| Mars | 2 | 2000-02-02 |
+------+--------+------------+
/*反过来,从小到大排出来*/
SELECT * FROM student ORDER BY birthday DESC;
/*结果*/
+------+--------+------------+
| name | gender | birthday |
+------+--------+------------+
| Mars | 2 | 2000-02-02 |
| Jay | 1 | 1999-09-09 |
| Kay | 1 | 1989-06-09 |
| May | 2 | NULL |
+------+--------+------------+
就是用了ORDER BY
关键字修饰要排序的字段,字段名称后面再跟ASC就是升序(值从小到大),DESC就是降序(值从大到小)
这里会把不公开生日的May同学也查了出来,要过滤掉她就是补上条件SELECT * FROM student WHERE birthday IS NOT NULL ORDER BY birthday DESC;
其实ORDER BY关键字默认就是ASC的,所以平时一般大家都懒得强制声明ASC
多字段排序 ¶
先按性别从男到女排,再按年龄从大到小排:
SELECT * FROM student WHERE birthday IS NOT NULL ORDER BY gender ASC, birthday DESC;
/*输出结果*/
+------+--------+------------+
| name | gender | birthday |
+------+--------+------------+
| Jay | 1 | 1999-09-09 |
| Kay | 1 | 1989-06-09 |
| Mars | 2 | 2000-02-02 |
+------+--------+------------+
查询前几条数据 ¶
用LIMIT
关键字,我们可以查询年龄最大的2位同学:
SELECT * FROM student WHERE birthday IS NOT NULL ORDER BY birthday DESC LIMIT 2;
/*输出结果*/
+------+--------+------------+
| name | gender | birthday |
+------+--------+------------+
| Mars | 2 | 2000-02-02 |
| Jay | 1 | 1999-09-09 |
+------+--------+------------+
LIMIT 2
就是从结果集中获取2条数据
更新数据记录 ¶
就是修改数据:
/*将指定姓名的同学性别更新为女*/
UPDATE student SET gender = 2 WHERE name = 'Jay';
/*将所有姓名包含ay的同学性别更新为男*/
UPDATE student SET gender = 1 WHERE name LIKE '%ay%';
/*无条件地将整张表的所有数据生日字段的值都设置为1990年1月3号*/
UPDATE student SET birthday = '1990-01-03';