SQL语言初步认识

1. SQL简介

2. 基本的数据定义

2.1 创建基本表

CREATE TABLE <表名>

<列名><数据类型>[<默认值>|<标识列设置>][<该列的完整性约束>]

`完整性约束:

①NOT NULL :该列值不能为空

②NULL :该列值可以为空

③UNIQUE :该列值不能有相同者

2.2 表结构的修改

ALTER TABLE <表名>

        ADD <列名><数据类型>[列的完整性约束]  为表添加一个新列

        ADD <表级完整性约束> 为表添加一个表级完整性约束

        ALTER COLUMN<列名><新的数据类型> 修改表中原有列的数据类型

        DROP COLUNM <列名>  删除表中原有的一个列

        DROP CONSTRAINT<表级完整性约束>  删除原有的表级完整性约束

2.3 删除基本表

DROP TABLE <表名1>[,<表名2>];

2.4 创建索引

CREATE [UNIQUE][CLUSTERED][NONCLUSTERED] INDEX <索引名>

ON <表名|视图名>(<列名清单>)

 <列名清单> 中,每个列名后面都要指定 ASC(升序)、DESC(降序),不指定默认升序

2.5 删除索引

DROP INDEX <索引名1>[,<索引名2>];

3. 基本的数据操纵

3.1 表中增加元组

INSERT INTO <表名>[(<属性名清单>)]

VALUES(<常量清单>);

 <常量清单>中,字符串常量和日期型常量要用单引号(英文符号)括起来

3.2 修改表中数据的基本方法

UPDATE <表名>

SET <列名>=<表达式>,[,<列名>=<表达式>]

[WHERE<条件>];

3.3 删除记录

DELETE FROM <表名>

[WHERE<条件>];

3.4 更新操作与数据库的一致性

4. 数据查询

4.1 无条件单关系查询

SELECT [DISTINCT / ALL] < 目标列表达式 [[AS] 别名] 清单 >

FROM <关系名>

DISTINCT : 每组重复元组只输出一条元组

默认ALL

4.1.1 查询关系中的所有信息

SELECT *

FROM <关系名>; 

4.1.2 指定要查询的列

SELECT Title

FROM Employee;

4.1.3 取消结果集中的重复行 

SELECT DITINCT Title

FROM Employee;

ps: DISTINCT 关键字必须放在列名前

4.1.4 查询经过计算的列

 SELECT Ename , 2024-Age AS [Year of Birth] , Title

FROM Employee;

4.1.5 查询汇总数据
函数功能
COUNT(DISTINCT / ALL]*)统计结果中元组个数
COUNT(DISTINCT / ALL]<列名>)统计结果中某列值的个数
MAX(<列名>)给出一列上的最大值
MIN(<列名>)给出一列上的最小值
SUM(DISTINCT / ALL]<列名>)给出一列上值的总和
AVG(DISTINCT / ALL]<列名>)给出一列上值的平均值

4.2 带条件单关系查询

SELECT [DISTINCT / ALL] < 目标列表达式 [[AS] 别名] 清单 >

FROM <关系名>

WHERE <查询条件表达式>

4.2.1 使用比较运算符

= 、 < 、 >、<=、>=、<>

4.2.2 使用特殊运算符
运算符号含义
IN、NOT IN检查属性值是否属于一组值之一

BETWEEN...AND..、

NOT BETWEEN...AND...

检查属性值是否属于某个范围
IS NULL、IS NOT NULL检查属性值是否为空
LIKE 、NOT LIKE字符串匹配

通配符:%表示任意长度的字符串(长度可以为0 

                _表示任意单个字符

4.2.3 多条件单关系查询

NOT 、 AND 、 OR

4.3 分组查询

SELECT [DISTINCT / ALL] <目标列表达式 [别名] 清单 >

FROM <关系名>

[WHERE<查询条件表达式>]

GROUP BY <列名清单>[HAVING<条件表达式>];

根据GRUOP BY 中的列名清单 的值进行分组

SELECT语句中有 集函数 COUNT、SUM等

HAVING语句条件作用于结果组

4.4 排序查询结果

SELECT [DISTINCT / ALL] <目标列表达式 [别名] 清单 >

FROM <关系名>

[WHERE<查询条件表达式>]

[GROPUP BY <列名清单>[HAVING<条件表达式>]]

ORDER BY < 列名[ASC / DESC ]清单>;

ORDER BY 语句只作用于最终查询结果 

4.5 多关系连接查询

4.5.1 交叉连接

SELECT [DISTINCT / ALL] <目标列表达式 [别名] 清单>

FROM <关系名[别名] 清单>

例如

SELECT e.Ename , e.Title , e.Dno , d.Dno , d.Name

FROM Employee e , Department d;

4.5.2 内部连接

SELECT [DISTINCT / ALL] <目标列表达式 [别名] 清单>

FROM <关系名[别名] 清单>

WHERE <连接条件表达式>

 SELECT e.Ename , e.Title , e.Dno , d.Dno , d.Name

FROM Employee e INNER JOIN Department d

ON e.Dno = d.Dno;

 例如

SELECT e.Ename , e.Title , e.Dno , d.Dno , d.Name

FROM Employee e , Department d

WHERE e.Dno = d.Dno;

上面的语句先将Employee表和Department表做交叉连接,检索出的行数是Employee表的行数乘以Deprtment表的行数,然后WHERE语句将Employee表的Dno列与Department表的Dno列进行匹配,相等的行检索出来予以返回。 

ps:连接的属性名不一定要相同,但是数据类型要兼容

4.5.3 外部连接

1.左外连接:除了返回两表中满足连接条件的元组以外,还返回左侧表中不匹配的元组,右侧表中的空值则以空值(NULL)表示

2.右外连接

3.全外连接

LEFT JOIN、 RIGHT JOIN、 FULL JOIN

4.5.4 自身连接

使用关系的别名

例如,Eno(职工号)、Ename(职工姓名)、Emgr(负责人)

SELECT emp1.Eno ,emp2.Emgr

FROM Employee emp1,Employee emp2

WHERE emp1.Emgr = emp2.Eno

 自身连接,找到间接负责人

4.6 嵌套查询

1.使用IN进行子查询

IN、NOT IN

2.使用比较运算符的嵌套查询

可以和ANY、ALL一起使用

3.使用BETWEEN的嵌套查询

4.相关子查询

例如

SELECT Ename

FROM Employee emp1

WHERE Age > 

        (SELECT AVG(Age)

         FROM Employee emp2

         WHERE emp2.Dno = emp1.Dno);

在相关子查询中,可以使用EXISTS ,测试子查询是否存在返回值

查询参加了项目的职工号、姓名

SELECT Eno,Ename

FROM Employee e

WHERE EXISTS

                (SELECT *

                 FEOM Item_Emp

                 WHERE Eno = e.Eno); 

子查询只返回逻辑值 

4.7 多个SELECT语句的集合操作

集合操作:UNION(并操作、INTERSECT(交操作、EXCEPT(差操作

例如

SELECT *

FROM Item_Emp

WHERE Ino = '201801'

UNION

SELECT *

FROM Item_Emp

WHERE Ino = '202001'

查询项目号为‘201801’和‘202001’项目的职工参与信息

ps:参加UNION的记录结果集必须有相同的列数 

5. 含有子查询的数据更新

5.1 INSERT 与子查询的结合

INSERT INTO Employee_01

SELECT *

FROM Employee

WHERE Dno = '01'

5.2 UPDATE 与子查询的结合

UPDATE Salary

SET Rest = Rest + 200

WHERE Eno IN

                (SELECT Eno

                 FROM Item_Emp

                 WHERE Ino = '201802');

使参加‘201802’项目的职工,工资表中津贴的值都增加200 

5.3 DELETE 与子查询的结合

DELETE FROM Item_Emp

WHERE Eno = 

                (SELECT Eno

                 FROM Employee

                 WHERE Ename = '丁过’);

删除项目参加人中包含‘丁过’的所有元组 

6. 视图

视图是从一个或多个关系(基本表或者已有的视图)导出的关系

视图是虚表,视图不建立索引

6.1 定义视图

CREATE VIEW <视图名>[<列名清单>]

        AS <子查询>

        [WITH CHECK OPTION]

  [WITH CHECK OPTION]:之后对视图进行插入、修改、删除操作,会加上子查询中的条件,如果条件判断成立,则进行插入、修改和删除的操作

6.2 删除试图

DROP VIEW <视图名>

6.3 视图的查询

6.4 视图的更新

不是所有的视图都是可以更新的

6.5 视图的作用

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值