Mysql复习

1、distinct关键字只在select单个属性时有效果,多个属性无效。

select distinct a,b from A;
//若有两个元组分别为(a=1,b=1)和(a=1,b=2)
//该次选择是会把这两条元组都筛选出来的

2、exists关键字

score表有s_id,c_id,score三个字段。

select * from score a where exists (select * from score b );

select * from score a where exists (select s_id from score b );

返回结果相同,即若内外查询无指定关联,只要内查询结果不为空,那就返回外查询成功的全部元组,否则返回空。

not exists关键字与exists关键字含义相反,表示后面跟的内查询返回值若为True,则外查询返回空;若内查询返回False,外查询则正常返回筛选的元组。
3、两个select语句可以并union、做交intersect、做差except。
4、改名操作:
查询的列改名要加as

select s_id as 学号,avg(s_score) as 平均成绩 from score
group by s_id
having avg(s_score)>60
order by s_id;

表重命名直接写在表名后面就行

select a,b 
from sc A,st B
where A.c=B.c;

4、join、left join 、 right join、full join
其中join为内连接,剩下三个外连接。
join和full join可以不加on或using()限制(根据我本人测试mysql好像不支持full join 加on条件,不知道咋回事),此时join和full join都变成笛卡尔积。
不写outer也会默认为外连接,自然连接需指定natural关键字
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用using作为限制条件时候,取两表的共有属性名,using(A1,A2),必须加括号。

5、插入数据:

insert into SC(A,B) values(a1,b1),(a2,b2),etc
//如果是全部属性的元组插入可略去表名后的(列名)
即:insert into SC values(a,b);

删除数据:

delete from SC [where ...]
//不加where则将表清空(表还在,只是没数据了)

修改数据:

update t3 set x=5,y='e' where y='a';
//mysql里update语句好像不支持row关键字

6、调整表结构:
新建表:

create table  SC
(A int(10),	//主键不必加NOT NULL
B char(10) not null,
primary key (A),
reference T(A));	//假设另一个表T中有同一个字段A,则这里指明外键关系

删除表:

drop table SC cascade/restrict;

表结构改动:

alter table SC add C int(11);
//添加新列C到SC表中
alter table SC drop C cascade/restrict;
//删除C列
alter table SC modify C char(50);
//将C列改成char(50)类型

7、嵌入式sql:
exec sql 打头,ebd_exec结束,共享变量前加:

8、mysql中的if和case语句:
case语句:
表示等于的简单版:

select *,(CASE sex WHEN '1' THEN '男' WHEN '0' THEN '女' ELSE '保密' END) as sex_text
from user

表示大小于:case when X1 then Y1 when X2 then Y2 else Y3 end

mysql> select *,(case when s_score>60 then'pass' else 'fail'end)as status from score;
+------+------+---------+--------+
| s_id | c_id | s_score | status |
+------+------+---------+--------+
| 01   | 01   |      80 | pass   |
| 01   | 02   |      90 | pass   |
| 01   | 03   |      99 | pass   |
| 02   | 01   |      70 | pass   |
| 02   | 02   |      60 | fail   |
| 02   | 03   |      80 | pass   |
| 03   | 01   |      80 | pass   |
| 03   | 02   |      80 | pass   |
| 03   | 03   |      80 | pass   |
| 04   | 01   |      50 | fail   |
| 04   | 02   |      30 | fail   |
| 04   | 03   |      20 | fail   |
| 05   | 01   |      76 | pass   |
| 05   | 02   |      87 | pass   |
| 06   | 01   |      31 | fail   |
| 06   | 03   |      34 | fail   |
| 07   | 02   |      89 | pass   |
| 07   | 03   |      98 | pass   |
+------+------+---------+--------+

if语句:
if(exp1,exp2,exp3)
若exp1为真返exp2字段否则exp3字段
ifnull(exp1,exp2)
若exp1空返回exp2

9、
select from where 语句的执行顺序:
先from取表,再where筛选,groupby分组,having条件筛选组,select挑选属性,最后orderby排序

posted @ 2019-06-04 13:30  NeoZy  阅读(107)  评论(0编辑  收藏  举报