/ Java / 203浏览

mysql note2

sql语句关键字执行顺序

file

基本查询语句

#去重distinct关键字,不推荐,效率低,后面主要是order by
SELECT DISTINCT age FROM student;
SELECT name FROM student;
## ORDER BY后面可以跟多个条件,DESC降序排序
SELECT * FROM student ORDER BY age,id DESC;
#先from(拿到所有的数据)然后where条件为真交给select,条件为假继续下一条判断下一条语句
SELECT * FROM student WHERE id > 3;
#想要id值为1,3,5,7的
SELECT id,name FROM student WHERE id=2 or id =3 or id =4;
SELECT id,name FROM student WHERE id in(2,3,4);
#GROUP BY分组根据某个字段的值对数据进行分组(1组1条记录)
#select后面的内容必须出现在group by中,如果没有出现就必须放在聚合函数中

# 聚合函数
count()
max()
min()
sum()
SELECT count(*) FROM student;
SELECT count(name) FROM student;

SELECT gender,count(gender) FROM student GROUP BY gender ;
# having 必须用在group by 之后.用于对分组的结果进行二次筛选
SELECT gender,count(gender) FROM student GROUP BY gender HAVING count(gender)>3 ;

#查询前几条数据
SELECT * FROM student LIMIT 3;

##分页查询
#OFFSET代表跳过几条记录查询后面的
SELECT * FROM student LIMIT 3 OFFSET 2;

#简写的方式,LIMIT前面的数字是offset后面的是limit
SELECT * from student LIMIT 0,2;
SELECT * from student LIMIT 2,2;
SELECT * from student LIMIT 4,2;

1ike模糊查询

%任意个字符任意一个字符

# %代表任意数量字符
select from score where cno LIKE '3%';
# _代表一个字符
select*from student where sname like'%_军';

子查询查考

https://blog.csdn.net/weixin_44827418/article/details/105752312

多表查询

不同多表查询的关系图

file

笛卡尔积

select * from student,score

基于笛卡尔积去除重复的数据寻找公共列(两张表都有的列)
寻找公共列(两张表都有的列)sno在学生表和成绩表中都有存在,所有sno是公共列公共列是指逻辑意义上的相同列,而不是字段名一致
最初的连接语法

select from student,score where student.sno =score.sno;

内连接和上面的S0L很类似内连接表达式的是两表的地位一致,没有主次之分,输出两表的公共部分。

所谓的公共部分如上所示没有1©8的数据,公共是指在两表中都出现的
内连接的语法是:select 字段列表 from 表1 inner join 表2 on 公共列的值相等

select sno from student;
select distinct sno from;
select sname,cno,degree from student s,score sc where s.sno sc.sno;
select from student s inner join score sc on s.sno sc.sno

外连接和内连接相比最大的区别在于:外连接区分主次,会显示主表的所有数据

学生表101183105107188109成绩表101103105107109

如果以学生表为主表,将会有15条记录!

主表的所有数据都会显示,主表有次表没有的显示为ul1

外连接

左连接

select from student s left outer join score sc on s.sno sc.sno;

右连接

select from student s right outer join score sc on s.sno = sc.sno;

注意

group by之后想要筛选只能用having,绝对不可以跟where语句,group by前面可以有where语句.

group by后面跟着的字段,select后面只能跟这个字段以及聚合函数,不能有其他字段

聚合函数(avg、sum、max、min、count),不能作为条件放在where之后,但可以放在having之后