DQL
(Data Query Language:数据查询语言)
- 所有的查询操作都要用到它 select
- 简单的查询,复杂的查询都要用到它
- 数据库最核心的语言,最重要的语言
- 使用频率最高的语言
指定查询字段
select * from student
select studentno,studentname from student
select studentno as 学号,studentname as 学生姓名 from student
select studentno 学号,studentname 学生姓名 from student
select CONCAT('姓名:',studentname) as 新名字 from student
语法:select 字段 from 表 有时候,列的名字不是那么的见名之意,我们可以用as给字段起别名 字段名 as 别名 或者是 表名 as 表别名
去重 distinct
作用:去除select查询出来的结果中重复的数据,重复的数据只显示一条
select * from result
select studentno from result
select distinct studentno from result
数据库的列(表达式)
select version()
select 100*3-2
select @@auto_increment_increment
select studentno,studentresult+1 as '提分后' from result
数据库中的表达式:文本值,列,null,函数,计算表达式,系统变量
select 表达式 from 表
where条件子句
作用:检索符合条件的值
搜索的条件都是由一个或者多个表达式组成!结果都是布尔值
逻辑运算符

select studentno,studentresult from result
select studentno,studentresult from result
where studentresult>=95 and studentresult<=100
select studentno,studentresult from result
where studentresult between 95 and 100
select studentno,studentresult from result
where not studentno=1000
模糊查询:比较运算符

select studentno,studentname from student
where studentname like '张%'
select studentno,studentname from student
where studentname like '张_'
select studentno,studentname from student
where studentno in(1000,1001)
select studentno,studentname from student
where address in('北京朝阳')
select studentno,studentname from student
where address='' or address is null
select studentno,studentname from student
where borndate is not null
联表查询

select * from student
select * from result
select s.studentno,studentname,subjectno,studentresult
from student as s
inner join result as r
where s.studentno=r.studentno
select s.studentno,studentname,subjectno,studentresult
from student as s
right join result as r
on s.studentno = r.studentno
select s.studentno,studentname,subjectno,studentresult
from student as s
left join result as r
on s.studentno = r.studentno
 练习:
select * from student
select * from result
select s.studentno,studentname,subjectno,studentresult
from student as s
inner join result as r
where s.studentno=r.studentno
select s.studentno,studentname,subjectno,studentresult
from student as s
inner join result as r
on s.studentno=r.studentno
select s.studentno,studentname,subjectno,studentresult
from student as s
right join result as r
on r.studentno = s.studentno
select s.studentno,studentname,subjectno,studentresult
from student as s
left join result as r
on s.studentno = r.studentno
select s.studentno,studentname,subjectno,studentresult
from student as s
left join result as r
on s.studentno = r.studentno where studentresult is null
select s.studentno,studentname,sub.subjectname,studentresult
from student as s
right join result as r
on r.studentno=s.studentno
inner join `subject` as sub
on r.subjectno=sub.subjectno
自连接 自己的表和自己的表连接;
核心:一张表拆分成两张一样的表即可
父类表:  子类表 查询父类对应的子类关系 
select a.categoryname as '父栏目',b.categoryname as '子栏目'
from category as a,category as b
where a.categoryid = b.pid
分页和排序
排序
select s.studentno,studentname,subjectname,studentresult
from student as s
inner join result as r
on s.studentno = r.studentno
inner join `subject` as sub
on sub.subjectno=r.subjectno
where subjectname = '高等数学-1'
order by studentresult DESC
分页
select * from student limit 0,5
语法:limit (查询起始下标,pageSize)
子查询
where (值是固定的,这个值是计算出来的)
本质:在where语句中嵌套一个子查询语句
select studentno,subjectno,studentresult
from result as r
inner join `subject` as sub
on r.subjectno=sub.subjectno
where subjectname='高等数学-1'
order by studentresult DESC
select studentno,subjectno,studentresult
from result
where subjectno=(
select subjectno from `subject`
where subjectname='高等数学-1'
)order by studentresult DESC
select subjectno from `subject` where subjectname='高等数学-1'
select studentno,studentname
from student
where studentno=(
select distinct studentno from result where studentresult>=80
)
select s.studentno,studentname
from student as s
inner join result as r
on s.studentno=r.studentno
inner join `subject` as sub
on r.subjectno=sub.subjectno
where subjectname='高等数学-2' and studentresult>=80
select DISTINCT s.studentno,studentname
from student as s
inner join result as r
on s.studentno=r.studentno
where studentresult>=80 and subjectno=(
select subjectno from `subject` where subjectname='高等数学-2'
)
select studentno,studentname
from student where studentno in(
select studentno from result where studentresult>=80 and subjectno=(
select subjectno from `subject` where subjectname='高等数学-2'
)
)
|