【数据原理及应用 学习总结】第二章 关系数据库标准语言SQL(2)

2.3数据查询

2.3.1基本查询

(1)SELECT子句的规定

  SELECT  [ ALL | DISTINCT]  * | <列名或列名表达式序列>

说明:

DISTINCT选项表示输出无重复结果的记录;

ALL选项是默认的,表示输出所有记录,包括重复记录

  * 表示选取表中所有的字段

(2)列起别名的操作

     原字段名   [AS]   列别名

(3)使用WHERE子句指定查询条件

运算符名称

符号及格式

说 明

算术比较判断

<表达式1> θ <表达式2>

θ代表的符号有:<<=>>=<>!==

比较两个表达式的值

逻辑比较判断

<比较表达式1> θ <比较表达式2>

θ代表的符号按其优先级由高到低的顺序为:

NOTANDOR

两个比较表达式进行非、与、或的运算

之间判断

<表达式> [NOT] BETWEEN <1> AND <2>

搜索(不)在给定范围内的数据

字符串模糊判断

<字符串>  [NOT]  LIKE  <匹配模式>

查找(不)包含给定模式的值

空值判断

<表达式>  IS  [NOT]  NULL

判断某值是否为空值

之内判断

<表达式[NOT]  IN  (<集合>)

判断表达式的值是否在集合内

(4)使用ORDER BY子句对查询结果排序

当SELECT语句中同时包含多个子句,如WHERE、GROUP  BY、HAVING、ORDER BYORDER BY 子句必须是最后一个子句

可以使用列的别名、列的位置进行排序

2.3.2分组查询

(1)聚合函数

函  数

说  明

COUNT(*)

COUNT(<列名>)

计算记录的个数

对一列中的值计算个数

SUM(<列名>)

求某一列值的总和

AVG(<列名>)

求某一列值的平均值

MAX(<列名>)

求一列值的最大值

MIN(<列名>)

求一列值的最小值

注意以下几点:

聚合函数只能出现在所查询的列、ORDER BY子句、HAVING子句中,而不能出现在WHERE子句、GROUP BY子句中

除了COUNT(*)之外,其他聚合函数(包括COUNT(<列名>))都忽略对列值为NULL值的统计

(2)使用GROUP  BY子句

(3)使用HAVING子句

2.3.3连接查询

连接查询时的注意事项:

① 要连接的表都要放在FROM子句中,表名之间用逗号分开,比如FROM  detp,emp

② 为了书写方便,可以为表起别名,表的别名在FROM子句中定义,别名放在表名之后,它们之间用空格隔开。注意,别名一经定义,在整个查询语句中就只能使用表的别名而不能再使用表名。

③ 连接的条件放在WHERE子句中,比如WHERE  emp.deptno=dept.deptno

④ 如果多个表中有相同列名的列时,在使用这些列时,必须在这些列的前面冠以表名来区别,表名和列名之间用句号隔开。比如SELECT   emp.detpno

(1)相等连接

(2)自身连接

(3)不等连接

(4)左外连接

(5)右外连接

2.3.4子查询

子查询的执行步骤如下:

首先取外层查询中表的第一个记录,根据它与内层查询相关的列值进行内层查询的处理(如WHERE子句的处理),若处理结果为真,则取此记录放入结果集

然后再取外层表的下一个记录进行内层查询的处理

重复这一过程,直至外层查询中表的全部记录处理完为止

(1)返回单值的子查询

(2)返回多值的子查询

WHERE子句中使用多值子查询时,必须使用多值比较运算符:[NOT]  IN[NOT]  EXISTSANYALL,其中ALLANY必须与比较运算符结合使用

2.3.5合并查询结果

UNION的语法格式为:

        SELECT 语句1

UNION [ALL]

SELECT 语句2

2.4数据的维护

2.4.2插入数据

       (1) INSERT语句

INSERT  INTO  表名 [ (列名1[,列名2……]) ]

         VALUES  (值1[,值2……])

          [,(值1[,值2……]),……,(值1[,值2……])]

(2)利用子查询向表中插入数据

INSERT  INTO  表名 [ (列名1[,列名2……]) ]

   SELECT语句

2.4.2更新数据

UPDATE语句

  UPDATE  表名

  SET   列名=[,列名=,……]

  [WHERE  <条件>]

MySQL运行在SAFE_UPDATES模式下,该模式会导致非主键条件下无法执行UPDATEADELETE命令。需要执行命令 SET SQL_SAFE_UPDATES=0; 修改数据库模式

2.4.3删除数据

DELETE语句

   DELETE  [ FROM ]  表名

     [WHERE  <条件>]

2.5索引和视图

2.5.1索引的创建与删除

        (1)创建索引

CREATE  [UNIQUE]  INDEX  索引名 

       ON   表名(列名[,列名]……)

(2)查看索引

SHOW  INDEX  FROM  <表名>;

(3)删除索引

DROP  INDEX  索引名  ON  表名;

2.5.2视图

        (1)创建视图

CREATE  [OR  REPLACE]  VIEW   <视图名>  [(<别名>[,<别名>]…)]

AS

  <SELECT语句>

  [WITH  CHECK  OPTION  ]

(2)修改视图

CREATE OR REPLACE VIEW;

用创建视图的语句将原来的视图覆盖掉

使用ALTER语句是MySQL提供的另外一种修改视图的方法:

 ALTER  VIEW   视图名[(别名[,别名]…)]

 AS

SELECT语句

[WITH  CHECK  OPTION];

(3)删除视图

DROP VIEW 视图名[,视图名,…];

(4)使用视图进行DML操作

<1> 简单视图:

① 数据是仅从一个表中提取的

② 不包含函数和分组数据

③ 可以通过该视图进行DML操作

<2>复杂视图:

① 数据是从多个表中提取的

② 包含函数和分组数据

③ 不一定能够通过该视图进行DML操作

<3>通过视图进行DML操作的规则:

① 可以在简单视图上执行DML操作

② 如果在一个视图中包含了分组函数,或GROUP BY子句,或DISTINCT关键字,则不能通过该视图进行DELETEUPDATEINSERT操作

③ 如果在一个视图中包含了由表达式组成的列,则不能通过该视图进行UPDATEINSERT操作

④ 如果在一个视图中没有包含引用表中那些不能为空的列,则不能通过该视图进行INSERT操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值