引入数据:
CREATE TABLE student3 (
id INT, -- 编号
NAME VARCHAR(20), -- 姓名
age INT, -- 年龄
sex VARCHAR(5), -- 性别
address VARCHAR(100), -- 地址
math INT, -- 数学
english INT -- 英语
);
INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),(3,'马景涛',55,'男','香港',56,77),(4,'柳岩',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港',99,99),(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);
SELECT * FROM student3;
- 基础查询
- 多个字段的查询
SELECT NAME,address FROM student3;
2. 去除重复
SELECT DISTINCT address FROM student3;
3. 计算列
● 可以使用四则运算计算一些列的值;
SELECT NAME,math,english,math+english FROM student3;
● null
参与的运算,计算结果都为null
。可以使用 ifnull(表达式1,表达式2)
,如果表达式1为null,则把表达式1替换为表达式2
SELECT NAME,math,english,IFNULL(english,0)+IFNULL(math,0) FROM student3;
4. 起别名
SELECT NAME,math AS "数学",english "英语",IFNULL(english,0)+IFNULL(math,0) "总分" FROM student3;
- 条件查询
- where子句后跟条件
- 运算符
运算符 | 功能 |
---|---|
>、<、<=、>=、=、<> | 大于、小于、大于等于、小于等于、等于、非 |
and 或 && | 与 |
or 或 || | 或 |
not 或 ! | 非 |
between A and B | 在A与B之间(包括A和B) |
in (集合) | 查询在集合之内的数据 |
is null | 查询为null的数据(不能用=null) |
like | 模糊查询。占位符:单个任意字符_ 多个任意字符% |
#查询年龄大于20岁
SELECT * FROM student3 WHERE age > 20;
#查询年龄等于20岁
SELECT * FROM student3 WHERE age = 20;
#查询年龄不等于20岁
SELECT * FROM student3 WHERE age != 20;
SELECT * FROM student3 WHERE age <> 20;
#查询年龄20-30岁
SELECT * FROM student3 WHERE age>=20 && age<=30;
SELECT * FROM student3 WHERE age>=20 AND age<=30;
SELECT * FROM student3 WHERE age BETWEEN 20 AND 30;
#查询年龄18岁、20岁、22岁、
SELECT * FROM student3 WHERE age=18 || age=20 || age=22;
SELECT * FROM student3 WHERE age=18 OR age=20 OR age=22;
SELECT * FROM student3 WHERE age IN(18,20,22)
#查询没有英语成绩的
SELECT * FROM student3 WHERE english IS NULL;
#SELECT * FROM student3 WHERE english = NULL; 错的
#查询姓马的人
SELECT * FROM student3 WHERE NAME LIKE "马%";
#查询姓名第二个字是化的人
SELECT * FROM student3 WHERE NAME LIKE "_化%";
#查询姓名是3个字的人
SELECT * FROM student3 WHERE NAME LIKE "___"
#查询姓名有马的人
SELECT * FROM student3 WHERE NAME LIKE "%马%";