1 - 基本SELECT 语句*|{[DISTINCT
] 列|表达式[别名],}表;
SELECT 标识选择了哪些列。 FROM 标识要选择的表。选择所有列
部门;
选择特定列
部门ID、位置ID
消息
SQL语言不区分大小写。 SQL 可以写成一行或多行。关键字不能省略或拆分为多行。
每个子句通常写在单独的行上。使用缩进使语句更易于阅读。列别名列别名:
重命名列。易于计算。您还可以在列名之后以及列名和别名使用的别名之间添加关键字“AS”。
双引号
别名中包含空格或特殊字符并区分大小写。 aliasSELECT last_name 使用AS 名称,commission_pct 从员工处进行通信。
细绳
该字符串可以是SELECT 列表中的任何字母、数字或日期。日期和字符只能在单引号内使用。对于返回的每一行,该字符串都会打印一次。使用DESCRIBE命令显示表结构,显示表结构DESC[RIBE]。
表名
描述一下你的员工
2 - 过滤和排序数据过滤
使用WHERE 子句排除不满足条件的行。 SELECT *|{[DISTINCT] 列|表达式[别名],} FROM 表[WHERE 条件];
WHERE 子句位于FROM 子句之后。
过滤查询中的行
员工
返回在部门90 工作的所有员工的信息。
WHERE 子句
SELECT 员工ID、姓氏、工作ID、部门ID FROM 员工WHERE 部门ID=90;
比较运算
SELECT 姓氏、工资FROM 员工WHERE 工资=3000;
其他比较操作
使用BETWEENBETWEEN操作显示某个范围内的值
选择员工的姓氏和工资。工资2500到3500不等。
下限值上限值
在
使用IN操作来显示列表中的值。
SELECT 员工ID、姓氏、工资、经理ID FROM 员工WHERE 经理ID IN (100, 101, 201);
喜欢
使用LIKE 操作选择相似的值。选择标准可以包含零个或多个字符(任意数量)。 _代表一个字符。
SELECT FROM WHEREfirst_name 员工姓名LIKE \'S%\';
喜欢
“%”和“-”可以一起使用。从员工中选择姓氏,其中姓氏类似于“_o%”;
NULL 使用IS (NOT) NULL 来确定空值。
SELECT 姓氏、经理ID FROM 员工,其中经理ID 为NULL;
逻辑运算
操作员
意义
和
析取集
或者
逻辑或
没有
逻辑上“不”
和
AND 要求关联关系为真。
选择员工ID、姓氏、工作ID、员工薪资
OROR 要求or 关系为真。
SELECT 员工ID、姓氏、工作ID、工资FROM 员工WHERE 工资=10000OR 工作ID LIKE \'%MAN%\';
没有
SELECT 姓氏、工作ID FROM 员工WHERE 工作IDNOT IN (\'IT_PROG\', \'ST_CLERK\', \'SA_REP\');
ORDER BY 子句
带ORDER BY 子句的Sort_ASC
(升序): 升序
_DESC
(降序): 降序
SELECT 语句中的ORDER BY 子句
结尾。
按聘用日期订购
DESC 降序排序
按别名对编年史进行排序
按多列排序
ORDER BY 根据列表的顺序排序。 SELECT 姓氏、部门ID、员工薪资ORDER BY 部门ID、薪资DESC;
您可以使用不在SELECT 列表中的列进行排序。 3 — 分组函数什么是分组函数?
分组函数对数据集进行操作并返回数据集的值。
员工
群组功能的类型
AVG()COUNT()MAX()MIN()SUM() 组函数语法
SELECT [列,] 分组函数(列), FROM 表[WHERE 条件] [GROUP BY 列] [ORDER BY 列];
AVG(平均)和SUM(求和)函数
也可以处理数值数据
使用AVG 和SUM 函数。
从员工WHERE job_id LIKE \'%REP%\' 中选择AVG(薪水)、MAX(薪水)、MIN(薪水)、SUM(薪水);
最小值和最大值函数
可与任何数据类型一起使用
使用MIN 和MAX 函数分析数据。
从员工中选择MIN(雇用日期)和MAX(雇用日期)。
计数函数
COUNT(*) 返回表中的记录总数,适用于任何数据类型。
从员工中选择COUNT(*),其中部门ID=50;
计数函数
COUNT(expr) 返回expr 不为空
记录总数。
从员工中选择COUNT(commission_pct),其中部门ID=50;
打包数据员工
分组数据: GROUP BY 子句语法
您可以使用GROUP BY 子句将表中的数据分为多个组。
SELECT 列、分组函数(列) FROM 表[WHERE 条件] [GROUP BY 组表达式] [ORDER BY 列];
请澄清:WHERE 必须放在FROM 之后
GROUP BY 子句
SELECT 列表中未包含在组函数中的所有列都必须包含在GROUP BY 子句中。
SELECT 部门ID、AVG(工资) FROM 员工GROUP BY 部门ID;
GROUP BY 子句
GROUP BY 子句中包含的列不需要包含在SELECT 列表中。
按部门ID 从员工组中选择平均(工资);
按多列分组
在GROUP BY 子句中包含多个列
SELECT Department ID 部门ID、职位ID、SUM(Salary) FROM Employee GROUP BY 部门ID、职位ID;
未经授权使用群组功能•
组函数不能在WHERE 子句中使用。
•
您可以在HAVING 子句中使用组函数。
SELECT 部门ID,AVG(薪水) FROM 员工WHERE AVG(薪水)8000 GROUP BY 部门ID;
WHERE AVG(salary) 8000 * 第3: 行出错ORA-00934: 此处不允许使用组函数
无法在WHERE 子句中使用组函数过滤组EMPLOYEES
过滤分组:HAVING 子句使用HAVING 过滤分组:
行现在已分组。使用群组功能。显示满足HAVING 子句条件的组。 SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY列, group_functiontable 条件]group_by_表达式] group_condition] 列];
有短语
从员工组中选择部门ID,MAX(薪水),按部门ID HAVING MAX(薪水)10000;
4——多表查询美女表男生表
如果我想查出女神的名字和对应男神的名字怎么办?多表连接语法:Select name, boyName from Beauty, Boys。
美容桌男生桌
笛卡尔集错误情况:select count(*) from Beauty;假设从Boys中选择了12行输出。 最终结果将是12*4=48 行。
笛卡尔集
在以下条件下,笛卡尔集产生:
省略连接条件。加入条件无效。您可以将valid 添加到WHERE 以避免笛卡尔集。
连接条件。 MySQL 连接使用联接来查询多个表中的数据。
SELECT 表1.列、表2.列FROM 表1、表2 WHERE 表1.列1=表2.列2;
将连接条件写入WHERE 子句中。如果表中存在相同的列,请在列名前添加表名前缀。
美容桌男童桌多桌连体
等值连接
SELECT Beauty.id,NAME,boyname FROM Beauty,boys WHERE Beauty.`boyfriend_id`=boys.i
区分重复的列名
使用表名前缀来区分多个表中的相同列。
不同表中具有相同列名的列可以使用表别名
辨析。如果使用表别名,则必须在select 语句中使用表别名而不是表名。表别名最多支持32 个字符,但表别名越少越好。
别名可用于简化查询。使用表名前缀可以提高执行效率。 SELECT bt.id,NAME,boyname FROM Beauty bt,boys b WHERE bt.`boyfriend_id`=b.id;
连接多个表
部门
地方
连接中
n
桌子,
至少
需要n-1个连接条件。 示例:连接
三个表至少需要两个连接条件。
练习:查询员工的姓氏、部门名称和城市
SQL99:使用ON 子句创建连接
自然连接使用与连接条件同名的列。您可以使用ON 子句指定其他连接条件。
该连接条件与其他条件是分开的。使用ON 子句使语句更易于阅读。键连接
类别: 内连接[内] 外连接左连接外连接左[外] 右连接外连接右[外] 连接onON 子句
SELECT bt.id,NAME,boyname FROM Beauty bt Inner join Boys b bt.`boyfriend_id`=b.id;
连接多个表
部门
地方
连接中
n
桌子,
至少
需要n-1个连接条件。 示例:连接
三个表至少需要两个连接条件。
练习:查询员工的姓氏、部门名称和城市
使用ON 子句创建多表联接
SELECT 员工ID、城市、部门名称FROM 员工e 加入部门d ON d.Department_id=e.Department_id 加入地点l ON d.location_id=l.location_id;
请加入请加入
外连接
美容桌男生桌
连接概览