DQL查询数据
指定查询字段
-- 查询全部学生
SELECT * FROM `student`
-- 查询指定的字段
SELECT `name`,`age` FROM `student`
-- 别名,给结果起名字 AS 可以给字段取别名,也可以给表取别名
SELECT `name` AS 学生姓名,`age` AS 学生年龄 FROM `student`
-- 函数 Concat(a,b)拼接成一个字符串
SELECT CONCAT('姓名:',`name`) AS 新名字 FROM `student`
-- 语法: SELECT 字段1,字段2 FROM `表`
-- 去重操作
-- 语法:SELECT DISTINCT 字段 FROM `表名`
SELECT DISTINCT gradename FROM `grade`
where条件子句
-- where语法添加条件
-- 语法:SELECT 字段1,字段2 FROM `表名` WHERE 条件1 AND 条件2
SELECT `name`,`age` FROM `student` WHERE `age`>=10 AND `age`<=11
模糊查询:比较运算符
运算符 | 语法 | 描述 |
---|---|---|
like | a like b | SQL匹配,如果a匹配b则结果为真 |
in | a in (a1,a2,…) | 如果a在a1,a2…其中的某个值中则结果为真 |
-- like结合 %(代表0到任意个字符) _(代表一个字符)进行查询
-- 例子:
-- 查询姓王的学生
SELECT `name` FROM `student` WHERE `name` LIKE '王%'
-- 查询姓王的学生且名字为两个字
SELECT `name` FROM `student` WHERE `name` LIKE '王_'
-- 查询姓王的学生且名字为三个字
SELECT `name` FROM `student` WHERE `name` LIKE '王__'
-- 查询姓王的学生且名字中有 文 字的
SELECT `name` FROM `student` WHERE `name` LIKE '王%文%'
-- in(具体的一个或者多个值)
-- 例子:
-- 查询年龄为10岁或者15岁的学生
SELECT `name` FROM `student` WHERE `age` IN (10,15)
联表查询
运算符 | 介绍 | 描述 |
---|---|---|
left join | 左查询 | 如果左边的表中要查询的字段不为空,无论右边的表查询的字段为不为空都可以查询到 |
inner join | 并查询 | 只要左右两边的表中要查询的字段有一个不为空就可以查询到 |
right join | 右查询 | 如果右边的表中要查询的字段不为空,无论左边的表查询的字段为不为空都可以查询到 |
查询两张表
-- SELECT `字段1`,`字段2`,`字段3` FROM `表1` INNER JOIN `表2` ON 两张表的交叉点
SELECT `name`,`age`,`gradename` FROM `student` INNER JOIN `grade` ON `id`=`gradeid`
查询两张以上的表
-- SELECT `字段1`,`字段2`,`字段3` FROM `表1` INNER JOIN `表2` ON 两张表的交叉点 INNER JOIN `表3` ON 三张表的交叉点
分页和排序
-- 排序:升序 ASC 降序 DESC
-- 语法:ORDER BY `排序根据的字段` 排序方法
SELECT `name`,`age`,`sex` FROM `student` ORDER BY `age` ASC
-- 分页
-- 语法:LIMIT (n-1)*size,size n代表当前页数,size代表一页有多少个数据
SELECT `name`,`age`,`sex` FROM `student` LIMIT 2,2
子查询
-- where中可以无限嵌套子查询
SELECT `id`,`name`,`age` FROM `student`
WHERE age IN (
SELECT `age` FROM `student`
WHERE `age`>11
)
分组过滤
INSERT INTO student(`name`,`age`) VALUES('王文凯',12)
SELECT `name` ,AVG(age),MAX(age),MIN(age) FROM `student`
GROUP BY `name` -- 通过指定字段进行分组
HAVING AVG(age)>10 -- 通过条件过滤数据