DQL 数据查询语言
select 查询
查询多列
select 列1,列2 from 表;
查询全部列
select * from 表;
where子句
where+ 条件
SELECT * FROM student WHERE c_number<>1;
SELECT * FROM student WHERE c_number BETWEEN 2 AND 3; # 查询2班 3班的同学
SELECT * FROM student WHERE c_number IS NOT NULL; # is NULL 为NULL
SELECT * FROM student WHERE c_number>=2 AND c_number<=3;
关系运算
运算符 | 作用 |
---|---|
> | 大于 |
>= | 大于等于 |
<> | 不等于 |
= | 等于 |
< | 小于 |
<= | 小于等于 |
like子句
like 像…一样
like ‘张%’ 以张开头的所有字符串
like ‘C_’ C+一个其他字符
% 匹配零个或者多个任意字符
_ 匹配一个任意字符
SELECT * FROM class WHERE c_name LIKE 'C%';
SELECT * FROM class WHERE c_name LIKE 'C_';
SELECT * FROM class WHERE c_name LIKE '%o%'; # 名字中带o的课程
and or
多个条件使用and or连接
is null/ is not null
查询为null或者不为null的字段
select * from student where stuname is not null;
order by 按顺序输出
select * from student order by stuName;
order by stuName asc;//升序(默认)
order by stuName desc;//降序
# 按照性别升序排序 性别一样按照名字降序排序
SELECT * FROM student ORDER BY sex ASC,stuName DESC;
distinct 去重
`select distinct stuId from student;
SELECT DISTINCT c_number FROM student; # 查询有学生的班级`
去除重复项
union/ union all
union 合并多个查询结果 去掉重复项
union all 合并多个查询结果 不去除重复项
select * from student
union
select * from teacher;
INSERT INTO class
SELECT 7,'日语'
UNION
SELECT 8,'法语'
UNION
SELECT 9,'西语';
合并要求查询的结果必须列一样
合并 班级号位1 姓张的同学
SELECT * FROM student WHERE c_number=1 OR stuName LIKE '张%';
SELECT * FROM student WHERE c_number=1
UNION ALL
SELECT * FROM student WHERE stuName LIKE '张%';
分页查询 limit
select * from student limit 3; # 查询前三项`
select * from student
limit 4,3; # 从第4项开始查询接下来三项
SELECT * FROM student DESC LIMIT 2,3; #从第二项开始 截取后面的三项
多表查询
笛卡尔积
SELECT class.c_name,student.stuName FROM class,student; # 笛卡尔积
SELECT class.c_name,student.stuName FROM class,student WHERE class.c_no=student.`
内链接方式
-- 联合查询
-- 内连接 找到class 班号和student的班号相同的记录
-- inner join
SELECT class.c_name,student.`stuName`
FROM class INNER JOIN student
ON class.c_no=student.`c_number`;
# 查询student 班级编号和 class班级编号一致的内容
# 不存在学生的班级 不存在班级的学生 都不会查询出来
右连接
根据右表为基础(student中的所有学生) 可以查询没有班级的同学
SELECT class.c_name,student.`stuName`
FROM class RIGHT JOIN student
ON class.c_no=student.`c_number`;
左连接
根据左表 (所有的班级) 可以查询没有学生的班级
SELECT class.c_name,student.`stuName`
FROM class LEFT JOIN student
ON class.c_no=student.`c_number`;
全连接 full join —> MySQL不支持 union 左连接+右连接
from 表1 inner join 表2 on 条件1 inner join 表3 on 条件…
一般连接查询 表格不需要连接太多 表格设计部分有问题
select class.className,student.stuName,subject.name
from `subject` left join class on subject.classid=class.id
left join student on class.id=student.classNo;
补充
别名 as 或者空格 如果多个表 字段名相同 可以用别名区分
或者用表名区分
SELECT c_no AS 班号, c_name 班名
FROM class;
SELECT tz29.class.c_no, tz29.class.c_name
FROM tz29.class;