MySQL
1.SQL动词
SQL功能 | 动词 |
---|---|
数据查询 | select |
数据定义 | create,drop,alter |
数据操纵 | insert,update,delete |
数据控制 | grant、revoke |
2.定义基本表
(1)建立一个学生表
create table Student
(Sno CHAR(9) PRIMARY KEY,/*列级完整性*/
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
(2)建立一个课程表
create table Course
(Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40) NOT NULL,
Cpno CHAR(4),/*先修课*/
Ccredit SMALLINT,
FOREIGN KEY(Ccno) REFERENCES Course(cno)/*Cpno是外码,参照表示Course,被参照列是Cno*/
);
(3)建立学生选课表SC
create table SC
(Sno CHAR(9) ,
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Con)
);
3.删除基本表
DORP TABLE <表名>[restrict|cascade];
restrict,欲删除的基本表不能被其他表的约束所引用,不能有视图,不能有触发器,不能有存储过程或函数等。
cascade,无限制条件
4.数据查询
SELECT [ALL|DISTINCT]<目标表达式>[,<目标表达式>]...
FROM <表名或视图>[,<表名或视图>...]|(<select语句>)[as]<别名>
[where<条件表达式>]
[group by<列名1>[HAVING<条件表达式>]]
[order by<列名2>[ASC|DESC]];
(1)DISTINCT消除查询的重复行;
(2)where子句常用的查询条件
查询条件 | 谓词 |
---|---|
比较 | =,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较符 |
确定范围 | between and,not between and |
确定集合 | in,not in |
字符匹配 | like,not like |
空值 | is null,is not null |
多重条件 | and,or,not |
(3)order by 子句
可以用order by子句对查询结果按照一个或多个属性进行排序(ASC升序默认,DESC降序)
例如:查询选修了3号课程的学生的学号及成绩,查询结果按分数的降序排列
select Sno,Grade
from SC
where Cno='3'
order by Grade DESC;
(4)聚集函数
只能用于select子句和group by 中的HAVING 子句中。不能用于where子句。
COUNT(*)(处理空值,其他聚集函数跳过空值)
COUNT([DISTINCT|ALL]列名)
SUM([DISTINCT|ALL]列名)
AVG([DISTINCT|ALL]列名)
MAX([DISTINCT|ALL]列名)
MIN([DISTINCT|ALL]列名)
(5)group by子句
分组,只能用having子句,不能用where子句。
5.连接查询
包括等值连接查询、自然连接查询、非等值连接查询、自身连接查询、外连接查询和复合连接查询
(1)等值与非等值连接查询
连接查询的where子句中用来连接两个表的条件称为连接条件
一般格式为
[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>
(2)自身连接
(3)外连接
关系R中某些元组有可能在S中不存在公共属性上值相等的元组,造成S或R的某些元组被舍弃,这些被舍弃的元组称为悬浮元组,如果把悬浮元祖也保存在结果关系中,而在其他属性上填写空值,那就需要外连接。
例如
select Student.Sno,Sname,Sage,Sdept,Cno,Grade
from Student Left outer join SC on(Student.Sno=SC.Sno);
6.集合查询
select 语句的查询结果是元组的集合,多个select语句的结果可进行集合操作。
集合操作主要包括并操作UNION,交操作INTERSECT,差操作EXCEPT