创建一个表
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
.......
)
1、增
(1)插入元祖
INSERT INTO<表名>[(<属性列1>[,<属性列2>]...)] VALUES(<常量1>[,<常量2>]...);
(2)插入子查询结果
INSERT INTO<表名>[(<属性列1>[,<属性列2>...])] 子查询;
例:
INSERT INTO TongXueLu (‘姓名‘,‘地址‘,‘电子邮件‘) SELECT name,address,email FROM Students
2、删
DELETE FROM<表名> [WHERE<条件>];
3、改
UPDATE<表名> SET<列名>=<表达式>[,<列名>=<表达式>]
[WHERE<条件>];
4、查
一般格式:
SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]... FROM<表名>[,<表名>]|(<SELECT语句>)[AS]<别名> [WHERE<条件表达式>] //检索条件 [GROUP BY<列名1>[HAVING<条件表达式>]] //分组筛选条件 [ORDER BY<列名2>[ASC|DESC]]; //排序依据
4.1 单表查询
(1)查询全体学生的学号。DISTINCT表示删除重复元素,如果不加则默认为ALL,则保留重复值。
SELECT DISTINCT Sno
FROM Student;
各个列的先后顺序可以与表中不一致。用户可以根据应用的需要改变列的显示顺序。
(2)查询全体学生的详细记录。
SELECT *
FROM Student;
(3)查询全体学生的学号、姓名及其出生年份。2020-Sage表示查询经过计算的值。
SELECT Sno,Sname,2020-Sage
FROM Student;
(4)查询满足条件的元祖
1)比较
SELECT Sname,Sage
FROM Student
WHERE Grade<60;
2)确定范围
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23;
3)确定集合
SELECT Sname,Ssex
FROM Student
WHERE Sdept NOT IN(‘CS‘,‘MA‘,‘IS‘);
4)字符匹配
查询以“DB_”开头,且倒数第三个字符为 i 的课程的详细情况。
SELECT *
FROM Course
WHERE Cname LIKE ‘DB\_%i_ _‘ESCAPE‘\‘;
5)查询空值
select name from a where email is null
(5)聚集函数
SELECT SUM(Ccredit)
FROM SC,Course
WHERE Sno=‘202015012‘AND SC.Cno=Course.Cno
(6)GROUP BY子句
查询选修了三门以上课程的学生学号
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>3;
(7)【查询返回限制行数(关键字:top percent)】
例1:select top 6 name from a
说明:查询表a,显示列name的前6行,top为关键字
例2:select top 60 percent name from a
说明:查询表a,显示列name的60%,percent为关键字
4.2 连接查询
(1)等值于非等值连接查询
SELECT Student.Sno,Sname FROM Student,SC WHERE Student.Sno=SC.Sno AND SC.Cno=‘2‘AND SC.Grade>90;
(2)外连接
左外连接
select s.name,c.courseID,c.score from strdents as s left outer join score as c on s.scode=c.strdentID 说明:在strdents表和score表中查询满足on条件的行,条件为score表的strdentID与strdents表中的sconde相同
右外连接
select s.name,c.courseID,c.score from strdents as s right outer join score as c on s.scode=c.strdentID 说明:在strdents表和score表中查询满足on条件的行,条件为strdents表中的sconde与score表的strdentID相同
4.3 嵌套查询
子查询中不能出现order by
SELECT Sname
FROM Student
WHERE Sno IN
(SELECT Sno
FROM SC
WHERE Cno=‘2‘);
4.4 集合查询
集合操作主要包括并操作UNION、交操作INTERSECT和差操作EXCEPT。
SELECT * FROM Student WHERE Sdept=‘CS‘ UNION|INTERSECT|EXCEPT SELECT * FROM Student WHERE Sage<=19;