as关键字web
使用as给字段起别名
数据库
select id as 序号, name as 名字, gender as 性别 from student;
经过as给表起别名svg
select s.name, s.id, s.gender from student as s ;
消除重复 distinct函数
distinct 能够消除重复的行
ssr
select distinct 列1,... from 表名 select gender from student; # 这样取到的结果是全部学员的性别列 select distinct gender from student; # 取到的是性别这列的种类
where 的做用是经过子句对表中的数据筛选,结果为True的行会出如今结果集中。where后面支持多种运算符,进行条件的处理:code
2.一、比较运算(>, <, =, >=, <=, !=)
xml
select * from student where age >= 20; select * from student where name != "xiaoming"; select * from student wheere hight < 170.00;
2.二、逻辑运算符(and, or, not)
对象
# 查询编号大于5的女同窗 select * from student where id>5 and gender=0 ; # 查询年龄小于20的同窗,或者身高高于180.00 select * from student where age<20 or hight<180.00; # 查询电话号码不为空的同窗 select * from student where phone is not null;
2.三、模糊查询(like, %~, _~)
排序
# 查询姓刘的学生 select * from student where name like '刘%'; # 查询姓刘名字为一个字的学生 select * from student where name like '刘_'; # 查询名为小明的学生 select * from student where name like '_小明';
2.四、范围查询(in, btween…and…)
it
# 查询编号为1或3或8的学生 select * from student where ID in (1,3,8); # 查询编号在2到6的男生 select * from student where (ID between 2 and 6) and gender="男";
2.五、空判断
# 查询没有填写身高的同窗 select * from student where hight is null;
2.六、优先级
3.一、排序的语法
select * from 表名 order by 列1 asp|desc[, 列2 asc|desc] 把数据按列1进行排序,若是某些行的列1值相同时,则按照列2的值排序。 asc从小到大排列,即升序; desc从大到小排列,即降序; 默认按照列值从小到大排序(即asc关键字) # 查询未删除男生的信息,并按学号降序 select * from student where gender='男' and is_delete=0 order by id desc; # 查询未删除学生的信息,按序号升序 select * from student where is_delete=0 order by id (asp); # 显示全部学生信息,先按年龄从大到小排序,若是年龄相同按照身高从大到下排序 select * from student order by age desc, hight desc;排序时要用order by 关键字,asc是升序,desc是降序
select * from 表名 limit start=0,count 说明:从start开始,到count条数据,start默认值为0,也就是当须要前n条数据时能够直接写上xxx.limit n; 查看前3行男生的信息 select * from student where gender=1 limit 0, 3; 获取第n页数据的SQL语句 select * from student limit (n-1)*m, m;
5.一、总数
count(*)计算总行数,括号中写星或者列名,结果是相同
# 查询学生总数 select count(*) from students;
5.二、最小值min()
# 查询未删除学生的最小编号 select min(id) from student where is_delete=0;
5.三、最大值max()
# 查询女生编号的最大值 select max(id) from student where gender=1;
5.四、求和sum()
# 查询本班全部男生的总身高 select sum(hight) from student where gender=0; # 查询本班全部男生的平均身高 select sum(hight)/count(*) from student where gender=0;
5.五、平均值avg()
# 查询未删除女生的平均年龄 select avg(age) from student where is_delect=0 and gender=1;
5.六、保留小数
round()不是聚合函数,做用是设置小数位
格式:round(值,小数位) # 查询全班年龄的平均值,保留两位小数 select round(avg(age),2) from students;
6.1 group by 分组
group by的使用特色:
# 查看全班性别的分组 select gender from student group by gender; # --->分为4组,(男,女,中性,保密)
注意: MYSQL中默认状况下,select后面的字段只能出如今如下两种状况:
6.二、group by + group_concat()
group_concat(字段名)根据分组结果,使用group_concat来放置每个分组中某个字段
# 按性别对全班同窗分组,而且列出各组中学生的姓名 select gender ,group_concat(name) from student group by gender; # 按照班级分组,并列出每一个班的学生编号 select cls_id ,group_concat(id) from student group by cls_id;
6.三、group by + 聚合函数
与group by一块儿使用时,聚合函数统计的对象是分组
# 按性别对全班同窗分组,而且统计每组的平均年龄 select gender ,avg(age) from student group by gender; # 按照班级分组,并列出每一个班有多少人 select cls_id ,count(*) from student group by cls_id;
6.四、group by + having
# 列出性别分组中,人数超过2人的分组,而且显示组内人数 select gender, count(*) from student group by gender having count(*)>2
6.五、group by + with rollup
with rollup做用:在最后添加一行来记录当前表中对该字段的操做结果,通常是统计总数。
# 列出性别分组,而且显示组内人数,统计汇总结果 select gender, count(*) from student group by gender with rollup; # 列出班级分组,显示班级内学员ID,统计汇总结果 select cls_id,con_cat(id) from student group by cls_id with rollup;
MySQL支持3种类型的链接查询:
链接查询的语法 select * from 表1 inner/right/left join 表2 on 表1.列1 运算符 表2.列2 # 使用内链接查询班级表与学生表 select * from students as s inner join classes as c on s.cls_id=c.id; # 使用左链接查询班级表与学生表 select * from students as s left join classrs as c on s.cls_id=c.id; # 使用右链接查询班级表与学生表 select * from students as s right join classes a sc on s.cls_id=c.id;
笛卡尔运算,将左表和右表中每一行都分别进行拼接组合 — 交叉链接cross join
把学生表添加到班级表中。
内链接在笛卡尔链接的基础之上,使用on 进行指定过滤笛卡尔积的数据条件。
注意: 在MySQL中join 和 inner join是等价的其余数据库中不同。
两个表中其余内容都基本类似时,只有不多几列的值不相同时,咱们采用自链接。这样作的好处是存储的是结构基本类似的数据,没有必要多作一个表分别来存储,通常状况是作两个表,而后同过内链接找到想要的内容。而如今用自查询,把全部信息都放进一个表中,经过给这个表气不一样的名字,把他当作内容相同的另外一个表进行链接。
9.一、子查询的概念
在一个select语句中,嵌入另外一个select语句,那么被嵌入的select语句被称为子查询语句,外部的那个select 被称为主查询语句。
子查询和主查询的关系:
9.二、子查询的分类
9.三、标量子查询
# 查询大于班级平均年龄的学生 select * from students where age>(select avg(age) from students);
9.四、列子查询
# 查询还有学生在班里的全部的班级的名称 select name from classes where id in (select cls_id from students);
9.五、行子查询
# 查找班级年龄最大,身高最高的学生 select