SQL语言

SQL(Structured Query language,结构化查询语言)是一种数据库查询语言。

SQL语言包含以下4个部分:

(1) 数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。

(2)数据操作语言(DML),例如:INSERT、UPDATE、DELETE等语句。

(3)数据查询语言(DQL),例如:SELECT语句。

(4)数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。


一、创建数据库 CREATE DATABASE

语法如下:

CREATE DATABASE 数据库名[可选参数……]


二、删除数据库 DROP DATABASE

语法如下:


DROP DATABASE 数据库名


三、创建表 CREATE TABLE

创建数据库后,就可在里面创建表,语法如下:


CREATE TABLE 表名(字段名 字段数据类型 [可选约束],字段名 字段数据类型 [可选约束],……)……


四、修改表 ALTER TABLE

下面通过例子来学习表的修改。

(1)将studentinfo表的name字段改为nvarchar(10),非空,代码如下:

ALTER TABLE studentinfoalter column name nvarchar(10) not null

(2)在(1)基础上添加一个gender字段,数据类型为nvarchar(2),非空,代码如下:

ALTER TABLE studentinfoadd gender nvarchar(2) not null

(3)把(2)中添加的字段删除,代码如下:

ALTER TABLE studentinfodrop column gender

(4)对gender字段添加约束,让它只能是“男”或“女”,代码如下:

ALTER TABLE studentinfoadd constraint ck_gender check(gender="男" or gender="女")

其中constraint代表约束,ck_gender是约束名。Check后面括号里是约束条件。


五、删除表 DROP TABLE

语法如下:


DROP TABLE 表名


六、插入数据 INSERT

INSERT语句用于将新行追加到表中。语法如下:


INSERT INTO 表名[(字段列表)] values (值列表)


七、更新数据 UPDATE

语法如下:


UPDATE 表名set 新值[where 条件]


八、删除数据 DELETE

语法如下:

DELETE [from] 表名 [where 条件]


九、查询语句

SELECT语句主要子句可归纳如下:

SELECT 查询列表 [INTO 新表名][FROM 表名][WHERE 查询条件][GROUP BY 分组条件][HAVING 搜索条件][ORDER BY 排序条件 [ASC|DESC]]

(1) FROM 子句返回初始结果集。

(2) WHERE 子句排除不满足搜索条件的行。

(3) GROUP BY 将选定的行收集到 GROUP BY 子句中各个唯一值的组中。

(4) 选择列表中指定的聚合函数可以计算各组的汇总值。

(5) HAVING 子句排除不满足搜索条件的行。


① FROM 子句

FROM子句是必需的,指定从哪些表中查询。

例1:查询 studentinfo 表里的所有记录,代码如下:

-- “*”代表所有字段select * from studentinfo

例2:查询 studentinfo 表里所有学生的学号和姓名,代码如下:

select id,namefrom studentinfo-- SELECT后面跟着查询列表,字段名用逗号隔开。


② WHERE 子句设置查询条件

例1:从 examscore 表里面查询分数高于80的学生的记录,代码如下:

SELECT
  FROM examscoreWHERE score>=80

例2:从 studentinfo 表和 examscore 表中查询出所有学生的成绩,要求有id,name,gender,score,class字段。查询结果按考试分数从高到低排序,代码如下:

select studentinfo id,name,gender,score,classfrom studentinfo,examscorewhere studentinfo.id = examscore.idORDER BY score DESC


③ 通配符

通配符有下面几种:

通配符说明
%替代任何字符串
_替代任何单个字符
[]替代指定范围内的单个字符
[^]替代指定范围外的单个字符

例如:查询 studentinfo 里面所有姓张的同学的信息,代码如下:

selectfrom studentinfowhere name like '张%'


十、连接查询

语法如下:

SELECT 参数列表FROM 连接表一 连接类型 连接表二[ON 连接条件]

(一二可以是同一张表,称为自连接)


连接类型有以下几种:

(1)[INNER] JOIN 内连接

(2)LEFT [OUTER] JOIN、RIGHT [OUTER] JOIN、FULL [OUTER] JOIN 外连接

(3)CROSS JOIN 交叉连接


① 内连接

内连接只显示符合条件的记录,是默认的方式。

例1:从 studentinfo 表和 examscore 表中查询出所有学生的成绩和所有信息。新建查询代码如下:.

SELECTFROM studentinfo INNER JOIN examscoreON studentinfo.id=examscore.id

查询结果会出现两个相同的id字段。因为“*”默认列出所有字段,不管是否重复。

修改后的代码:

SELECT studentinfo.id,name,age,gender,class,scoreFROM studentinfo INNER JOIN examscoreON studentinfo.id=examscore.id


② 外连接

(1)LEFT [OUTER] JOIN:显示左边表中所有记录,以及右边表中符合条件的记录。

 代码如下:

SELECTFROM studentinfo LEFT JOIN examscoreON studentinfo.id=examscore.id

(2)RIGHT [OUTER] JOIN:显示右边表中所有记录,以及左边表中符合条件的记录。

 代码如下:

SELECTFROM studentinfo Right JOIN examscoreON studentinfo.id=examscore.id

(3)FULL [OUTER] JOIN:显示所有表中的所有记录

 代码如下:

SELECTFROM studentinfo FULL JOIN examscoreON studentinfo.id=examscore.id


③ 交叉连接

不带 ON 子句,它返回被连接的两个表所有数据行的笛卡尔积。

新建查询代码如下:

SELECTFROM studentinfo CROSS JOIN examscore



上一篇:SQL考核

下一篇:无