1.数据定义DDL(Data Definition Language)语言即对表结构的一些定义,主要包括动词为CREATE/DROP/ALTER。

1.1.CREATE语句

CREATE TABLE ( [列级完整性约束条件][, [列级完整性约束条件]]
...
[,]
)
如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
(1)

CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY, /列级完整性约束条件,Sno是主键/
Sname CHAR(20) UNIQUE, /Sname取唯一值/
Ssex CHAR(2) DEFAULT '男',
Sage SMALLINT,
Sdept CHAR(20)
)

(2)

DROP TABLE IF EXISTS Course;
create table Course(
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)/表级完整性约束条件,被参照表是Course,被参照列是Cno/
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

(3)

DROP TABLE IF EXISTS 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(Cno)
)

1.2.ALTER语句

ALTER TABLE
[ADD [完整性约束]][DROP ]
[ALTER COLUMN ]

(1)

ALTER TABLE Student ADD S_entrance DATE;

1.3.DROP语句

DROP TABLE [RESTRICT|CASCADE]
若选择RESTRICT:则该表的删除是有限制条件的。欲删除的基本表不能被其他表的约束所引用(如CHECK、FOREIGN KEY等约束),
不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象,则此表不能被删除。
若选择CASCADE:则该表的删除没有限制条件。在删除基本表的同时,相关的依赖对象,例如视图都将被一起删除。
DROP TABLE Student CASCADE

2.数据操纵语言DML(Data Manipulation Language)即对表格数据中的一些操作,包括的动词为SELECT/INSERT/UPDATE/DELETE

2.1.SELECT语句

SELECT [ALL|DISTINCT] [,]...
FROM [,]...
[WHERE ][GROUP BY [HAVING ]]
[ORDER BY [ASC|DESC]]

  • 1.目标列表达式有以下可选格式:
    (1)
    (2).

    (3)COUNT([DISTINCT|ALL] )
    (4)[.][,[.]]...
    其中可以是由属性列、作用于属性列的聚集函数和常量的任意算数运算(+-
    /)组成的运算公式。
  • 2.聚集函数的一般格式为:
    COUNT/SUM/AVG/MAX/MIN ([DISTINCT|ALL] )
  • 3.WHERE字句的表达式有以下可选格式:
    (1) //ANY|ALL
    (2) [NOT] BETWEEN //(SELECT语句) AND //(SELECT语句)
    (3) [NOT] IN ([,]...)/(SELECT语句)
    (4) [NOT] LIKE
    (5) IS [NOT] NULL
    (6)[NOT] EXISTS (SELECT语句)
    (7) AND/OR [AND/OR ]

2.1.1.单表查询

(1)简单的查询指定列

SELECT Sname,Sage FROM Student WHERE Sage<20;

(2)确定范围,BETWEEN A AND B

SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;

(3)查询经过计算的列

SELECT Sname,2016-Sage FROM student

(4)查询比较大小后的结果
用于比较的运算符如下:=(等于),>(大于),<(小于),>=(大于等于),<=(小于等于),!= 或 <>(不等于),!>(不大于),!<(不小于)

SELECT DISTINCT Sno FROm SC WHERE Grade <60

(5)确定集合
谓词IN用来查找属性值属于指定集合的元组

SELECT Sname,Ssex FROM Student WHERE Sdept [NOT] IN('CS','MA','IS')

(6)字符匹配
谓词LIKE用来进行字符串的匹配,其语法格式为:[NOT] LIKE ''[ESCAPE '']
其含义是查找指定的属性列值与相匹配的元组。可以是一个完整的字符串,也可以含有通配符%和_。
其中,%(百分号)表示任意长度(长度可以为0)的字符串。例如a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab等都满足该匹配串。
_(下横线)代表任意单个字符。例如a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb都满足该匹配串。

SELECT Sname FROM student WHERE Sname [NOT] LIKE '欧阳__'
SELECT Sname FROM student WHERE Sname [NOT] LIKE '欧阳%'

若用户要查询的字符串本身就含有通配符%或_,这是就要使用ESCAPE ''短语,对通配符进行转义。
ESCAPE '\'表示""为换码字符。这样匹配串中紧跟在""后面的字符""不再具有通配符的含义,转义为普通的""字符。
查询"DB_"开头,且倒数第3个字符为i的课程的详细情况。
SELECT Cno,Ccredit FROM course WHERE Cname LIKE 'DB_%i__' ESCAPE '\';
(7)涉及空值的查询

SELECT Cno,Ccredit FROM course WHERE Cno IS [NOT] NULL

(8)ORDER BY字句

SELECT * FROM student ORDER BY Sdept,Sage DESC

(9)聚集函数

SELECT COUNT(*) FROM student
SELECT AVG(Sage) FROM student
SELECT Max(Sage) FROM student

(10)GROUP BY

SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno

(11)HAVING

SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) >3

这里先用GROUP BY字句按Sno进行分组,再用聚集函数COUNT对每一组计数。HAVING短语给出了选择组的条件,只有满足条件(即元组个数>3,
表示此学生选修的课超3门)的组才会被选出来。
GROUP BY作用于所有的记录,HAVING短语作用于根据关键字GROUP BY后的组。

2.1.2.连接查询

自然连接,从表student中找到第一个元组然后和在表SC中逐一查找与其匹配的元组,全表扫描,如果已经建立索引的话,会很快。
自然连接可能造成不符合条件的元组的舍弃,如果不想舍弃不满足条件的元组,请用左(右)外连接

SELECT student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student,SC WHERE student.Sno=sc.Sno

自身连接

SELECT FIRST.Cno,SECOND.Cpno FROM course FIRST,course SECOND WHERE FIRST.Cpno=SECOND.Cno

外连接:把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),那么这种连接就叫做外连接(outer join)。
左外连接:只把左边关系R中要舍弃的元组保留就叫做左外连接(left outer join或left join)
右外连接:只把右边关系S中要舍弃的元组保留的叫做右外连接(right outer join或right join)

SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student LEFT OUTER JOIN SC ON (Student.Sno=SC.Sno)

多表连接

SELECT student.Sno,Sname,Cname,Grade FROM student,SC,course WHERE student.Sno=sc.Sno AND sc.Cno=course.Cno

嵌套查询,即多个SELECT语句嵌套在一起。

SELECT Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno='2')

2.2.INSERT语句

INSERT INTO [([,]...)]
VALUES ([,...])

INSERT INTO student (Sno,Sname,Ssex,Sdept,Sage) VALUES('201612545','Tom','男','IS',18)

2.3.UPDATE语句

UPDATE SET =[,=]... [WHERE ]

UPDATE student SET Sage=22 WHERE Sno='201612345'

2.4.DELETE语句

DELETE FROM [WHERE ]

DELETE FROM student WHERE Sno='20161565'

参考自《数据库系统概论第4版》王珊 萨师煊

最新文章

  1. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
  2. java基础-继承
  3. Currency System in Geraldion
  4. MSSQL数据的批量插入
  5. 解决 LINUX mysql不能通过IP连接 只能localhost 权限没问题情况下
  6. windows server 2003下安装.net framework 3.5 一直安装不成功
  7. qt 总结
  8. stack适配栈
  9. Eclipse + CDT + YAGARTO + J-Link,STM32开源开发环境搭建与调试
  10. Redis 缓存 + Spring 的集成示例(转)
  11. sudo找不到npm的解决办法及及使用cnpm加速[已解决]
  12. windows 下nginx 虚拟主机搭建
  13. vue数据驱动作用域问题
  14. ArcSDE 10.1安装、配置、连接
  15. (一)校园信息通微信小程序从前端到后台整和笔记
  16. svn 安装
  17. IP通信基础原理课堂笔记----HCL(1)
  18. VUE最佳实践
  19. Servlet -- 中文乱码解决
  20. EntityFramework使用总结(与MVC4.0实现CURD操作)

热门文章

  1. building Utils {{ant+ivy}、{maven}}怎么样手动将下载下来的 JAR 包添加到 Maven、ivy 的本地仓库
  2. 【BZOJ】1015: [JSOI2008]星球大战starwar
  3. Centos 6.2 32位机器安装新的JDK和Weblogic
  4. NGUI系列教程二
  5. Automotive Security的一些资料和心得(5):Privacy
  6. PHP漏洞全解(一)-PHP网站的安全性问题
  7. win7 不能启动 memcached 总是反回failde to start service
  8. Nagios 邮箱告警的方式太OUT了!
  9. 四大主流云平台对比--CloudStack, Eucalyptus, vCloud Director和OpenStack。
  10. cocos2d-html5 Layer 和 Scene 创建模式