DQL
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DQL相关的知识,希望对你有一定的参考价值。
DQL (Date Query Language)查询
语法
SELECT [ALL | DISTINCT]
{*|table.*|[table.field1 [as alias1][table.field2[as alias2]][, …]]}
FROM table_name [as table_ alias ]
[left|out|inner join table_name2]#联合查询
[where.....] #指定结果需要满足的条件
[group by...] #指定分组按照哪几个字段来分组
[having....] #过滤分组的记录必须满足的次要条件
[order by...] #指定查询记录按一个或多个条件排序
[limit{[offset]row_count | row_count }]; #指定查询的记录从哪条至哪条
[] 代表可选
{} 代表必须选
create table Student(
StudentId int primary key not null auto_increment,
StudentName varchar(12) not null,
Phone int (11) not null,
Address varchar(12);
)
基本查询
*查询所有
select * from student;
*查询某列
select StudentName,Phone,Address from student
*查询别名
select studentname sname from student;
select student.gradeid from subject as sub,phone ph
DISTINCT关键字
作用:
去掉SELECT查询返回的记录结果中重复的记录(所有返回列的值都相同),只返回一条
语法:
select distinct 字段名1,字段名2.... from 表名
注意:
all 关键字是默认的,返回所有的记录,与之相反
#查询成绩表中的所包含的课程ID
SELECT DISTINCT SubjectNo FROM result;
#查询过滤重复
#若查询列中均存在重复则过滤
select distinct phone,address from student;
#查询表达式
select version(),100*3 as sum;
select now() ‘当前时间‘;
insert into t_tabl(create_time) values(now());
select studentno+studentname as ‘no&name‘ from student;
#concat 拼接字符串
select concat(email+‘@163.com‘) as email from student;
where条件语句
用于检索数据表中符合条件的记录
搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假
搜索条件的组成
*逻辑操作符
*比较操作符
select * from subject where classhour between 100 and 120;
select * from subject where classhour >=100 and classhour <= 120;
#查询密码为null的人
select studentname from student where loginwd is not null;(<> null or != null is fual)
关键字 |
AND或&& aANDb或a&&b 逻辑与,同时为真结果才为真 |
OR或|| aORb或a||b 逻辑或,只要一个为真,则结果为真 |
XOR或^ aXORb 逻辑异或,不同为真,相同为假 |
NOT或! NOTa或!a 逻辑非,若操作数为假,结果则为真 |
-------------------------------------------------------------|
ISNULL aISNULL 若操作符为NULL,则结果为真 |
ISNOTNULL aISNOTNULL 若操作符不为NULL,则结果为真 |
BETWEEN aBETWEENbANDc 若a范围在b与c之间则结果为真 |
LIKE aLIKEb SQL模式匹配,若a匹配b,则结果为真 |
IN aIN(a1,a2,a3,?.)若a等于a1,a2?中的某一个,则结果为真 |
1、数值数据类型的记录之间才能进行算术运算;
2、相同数据类型的数据之间才能进行比较
in 查询
select 字段1,字段2........ from TableName where 字段x In(值1,值2,值3....)
*查询的字段x的值,至少与括号的的一个值相同 *多个值要用括号隔开
SELECT * FROM subject where ClassHour = 100 OR ClassHour = 110 OR ClassHour=120; #普通组处理方式
SELECT * FROM subject where ClassHour IN (100,110,120); #使用IN进行查询方式,更为简洁,效率更高
like 模糊查询(与= 势不两立)
*与“%”一起使用,表示匹配0或任意多个字符(通配符,所有符合的条件)
*与“_”一起使用,表示匹配单个字符(可以添加多个‘_‘)
SELECT * FROM subject WHERE SubjectName LIKE "%数学%"; #查询包含“数学”的所有课程
SELECT StudentNo,StudentName FROM student WHERE StudentName LIKE "李__"; #查询所有姓名为“李**”三个字的学生信息
范围内查找
select * from student where gradeid in (1,9);
select * from student where address in(‘sdf‘,‘sdfa‘);
table subject(subjectno,subjectname,classhour,gradeid,subjectno,gradename);
table grade()
select * from subject s,grade g where s.gradeid = g.gradeid;
select * from subject sub join grade gra on sub.gradeid = gra.gradeid
inner|left|right| join tablename on xxxx=yyyyyy #这句可以重复写,连接多个表的
;#跟上句等同
左外连接
以左表为主的表(无论左表有无数据吗,所有数据都会显示出来)
等值和非等值的连接查询
与单表查询类似,都是SELECT语句
把多个表放到FROM后,并用逗号隔开
可使用AS关键字取别名,便于引用
如无重名查询字段则可省略数据表的指定
示例
#要求:从subject和grade数据表查询课程名称和所属年级名称
order by 查询
对SELECT语句查询得到的结果,按某些字段进行排序,与DESC或ASC搭配使用,默认为ASC
#排序
select * from subject order by classhour asc; <--subject为表名,classhour为字段,asc为升序-->
select * from subject order by classhour,subjectid desc;<--多字段排序,先按第一个字段属性排名,再按第二字段属性排名,比如第一字段有两个90,顺序按第而属性40,50的降序排-->
limit [m,]n or limit n offset m
限制SELECT返回结果的行数
m 制定第一个返回记录行的偏移量
n 制定返回记录行的最大数目
注意:
m不指定则偏移量为0,从第一条开始返回前n条记录
limit 常用于分页显示
select * from student limit 10;#前10条数据
select * from student order by StudentNo desc limit 10;
select * from student limit 5,9;#从第五条数据开始往后查询9个数据
子查询
select SubjectName,gradeid from Subject where gradeid in (select gradeid from grade) #多条结果不能用 ‘=‘
聚合函数
COUNT() |返回满足SELECT条件的记录总和数,如SELECTCOUNT(*)..
SUM() |返回数字字段或表达式列作统计,返回一列的总和
AVG() |通常为数值字段或表达列作统计,返回一列的平均值
MAX() |可以为数值字段、字符字段或表达式列作统计,返回最大的值
MIN() |可以为数值字段、字符字段或表达式列作统计,返回最小的值
select count(StudentNo) ‘总数据‘ from student;
select sum(字段) ‘总和‘ from subject ; #某列累加的值
select avg/min/max(字段) ‘平均课时‘/‘最小值‘/‘最大值‘ from tablename;
分组
对student 按照性别分组 group by....
select sex,count(sex) from student group by sex;
自动添加一列计算总格
select sex,count(sex) from student group by sex with rollup;
select group_concat(studentname),count(sex) from student group by sex with rollup;
对student 按照性别分组,其中一组人数大于10的那组having
having 分组后进行筛选
select sex,count(sex) from student group by sex having count(sex) >10 ;
合并
* union 合并相同数据
select * from subject union select * from grade;
* union all 合并所有数据
select * from subject union all select * from grade; #
exit #若科目是4,则可以找出当4科目的其他牵引条件
select subjectname,gradeid from subject where not exits/exits(select * from subject where id = 4 )
以上是关于DQL的主要内容,如果未能解决你的问题,请参考以下文章