关于mysql:MySQL数据处理之查询

2次阅读

共计 4700 个字符,预计需要花费 12 分钟才能阅读完成。

1—根本 SELECT 语句
*|{[DISTINCT] column|expression [alias],…}

table;

SELECT 标识抉择哪些列。
FROM 标识从哪个表中抉择。
抉择全部列

departments;

抉择特定的列

department_id, location_id

注 意

SQL 语言大小写不敏感。
SQL 能够写在一行或者多行
关键字不能被缩写也不能分行
各子句个别要分行写。
应用缩进进步语句的可读性。
列的别名
列的别名:

重命名一个列。
便于计算。
紧跟列名,也能够在列名和别名之间退出关键字‘AS’,别名应用双引号,以便在别名中蕴含空格或非凡的字符并辨别大小写。
应用别名
SELECT last_name AS name, commission_pct comm

FROM employees;

字符串

字符串能够是 SELECT 列表中的一个字符, 数字, 日期。
日期和字符只能在单引号中呈现。
每当返回一行时,字符串被输入一次。
显示表构造
应用 DESCRIBE 命令,示意表构造 DESC[RIBE] tablename

DESCRIBE employees

2—过滤和排序数据
过滤

应用 WHERE 子句,将不满足条件的行过滤掉。
SELECT *|{[DISTINCT] column|expression [alias],…}

FROM table

[WHERE condition(s)];

WHERE 子句紧随 FROM 子句。

在查问中过滤行

EMPLOYEES

返回在 90 号部门工作的所有员工的信息

WHERE 子句

SELECT employee_id, last_name, job_id, department_id

FROM employees

WHERE department_id = 90 ;

比拟运算


SELECT last_name, salary

FROM employees

WHERE salary<= 3000;

其它比拟运算

BETWEEN

应用 BETWEEN 运算来显示在一个区间内的值

SELECT last_name, salary

FROM employees

WHERE salary BETWEEN 2500 AND 3500;

Lower limit Upper limit

IN

应用 IN 运算显示列表中的值。

SELECT employee_id, last_name, salary, manager_id

FROM employees

WHERE manager_id IN (100, 101, 201);

LIKE

应用 LIKE 运算抉择相似的值
抉择条件能够蕴含字符或数字:
_% 代表零个或多个字符(任意个字符)。

_ 代表一个字符。

SELECT FROM WHERE

first_name employees

first_name LIKE ‘S%’;

LIKE

‘%’和‘-’能够同时应用。
SELECT last_name

FROM employees

WHERE last_name LIKE ‘_o%’;

NULL

应用 IS (NOT) NULL 判断空值。

SELECT last_name, manager_id

FROM employees

WHERE manager_id IS NULL;

逻辑运算

操作符

含意

AND

逻辑并

OR

逻辑或

NOT

逻辑否

AND

AND 要求并的关系为真。

SELECT employee_id, last_name, job_id, salary

FROM employees

OR

OR 要求或关系为真。

SELECT employee_id, last_name, job_id, salary

FROM employees

WHERE salary >= 10000

OR job_id LIKE ‘%MAN%’;

NOT

SELECT last_name, job_id

FROM employees

WHERE job_id

NOT IN (‘IT_PROG’, ‘ST_CLERK’, ‘SA_REP’);

ORDER BY 子句

应用 ORDER BY 子句排序
_ASC(ascend): 升序

_DESC(descend): 降序

ORDER BY 子句在 SELECT 语句的结尾。
ORDER BY hire_date

降序排序

DESC

按别名排序

annsal

多个列排序

依照 ORDER BY 列表的程序排序。
SELECT last_name, department_id, salary

FROM employees

ORDER BY department_id, salary DESC;

能够应用不在 SELECT 列表中的列排序。
3 — 分组函数
什么是分组函数

分组函数作用于一组数据,并对一组数据返回一个值。

EMPLOYEES

组函数类型

AVG()
COUNT()
MAX()
MIN()
SUM()
组函数语法

SELECT [column,] group_function(column), …

FROM table

[WHERE condition]

[GROUP BY column]

[ORDER BY column];

AVG(平均值)和 SUM(共计)函数

能够对数值型数据应用 AVG 和 SUM 函数。

SELECT AVG(salary), MAX(salary),

MIN(salary), SUM(salary)

FROM employees

WHERE job_id LIKE ‘%REP%’;

MIN(最小值)和 MAX(最大值)函数

能够对任意数据类型的数据应用 MIN 和 MAX 函数。

SELECT MIN(hire_date), MAX(hire_date)

FROM employees;

COUNT(计数)函数

COUNT(*) 返回表中记录总数, 实用于任意数据类型。

SELECT COUNT(*)

FROM employees

WHERE department_id = 50;

COUNT(计数)函数

COUNT(expr) 返回 expr 不为空的记录总数。

SELECT COUNT(commission_pct)

FROM employees

WHERE department_id = 50;

分组数据
EMPLOYEES


分组数据: GROUP BY 子句语法

能够应用 GROUP BY 子句将表中的数据分成若干组

SELECT column, group_function(column)

FROM table

[WHERE condition]

[GROUP BY group_by_expression]

[ORDER BY column];

明确:WHERE 肯定放在 FROM 前面

GROUP BY 子句

在 SELECT 列表中所有未蕴含在组函数中的列都应该蕴含在 GROUP BY 子句中。

SELECT department_id, AVG(salary)

FROM employees

GROUP BY department_id ;

GROUP BY 子句

蕴含在 GROUP BY 子句中的列不用蕴含在 SELECT 列表中

SELECT AVG(salary)

FROM employees

GROUP BY department_id ;

应用多个列分组

在 GROUP BY 子句中蕴含多个列

SELECT department_id dept_id, job_id, SUM(salary)

FROM employees

GROUP BY department_id, job_id ;

非法应用组函数

• 不能在 WHERE 子句中应用组函数。

• 能够在 HAVING 子句中应用组函数。

SELECT department_id, AVG(salary)

FROM employees

WHERE AVG(salary) > 8000

GROUP BY department_id;

WHERE AVG(salary) > 8000

*

ERROR at line 3:

ORA-00934: group function is not allowed here

WHERE 子句中不能应用组函数

过滤分组

EMPLOYEES

过滤分组:HAVING 子句

应用 HAVING 过滤分组:

行曾经被分组。
应用了组函数。
满足 HAVING 子句中条件的分组将被显示。
SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY

column, group_function

table condition]

group_by_expression] group_condition] column];

HAVING 子句

SELECT department_id, MAX(salary)

FROM employees

GROUP BY department_id

HAVING MAX(salary)>10000 ;

4 — 多表查问

beauty 表 boys 表

如果想查问女神名称和对应男神名称,肿么办?
多表连贯

语法:select name,boyName from beauty,boys;

beauty 表 boys 表


笛卡尔集的谬误状况:

select count(*) from beauty;

假如输入 12 行

select count(*)from boys;

假如输入 4 行

最终后果:12*4=48 行

笛卡尔集

笛卡尔集会在上面条件下产生:

省略连贯条件连贯条件有效所有表中的所有行相互连贯为了防止笛卡尔集,能够在 WHERE 退出无效的连贯条件。
Mysql 连贯

应用连贯在多个表中查问数据。

SELECT table1.column, table2.column

FROM table1, table2

WHERE table1.column1 = table2.column2;

在 WHERE 子句中写入连贯条件。
在表中有雷同列时,在列名之前加上表名前缀
beauty 表 boys 表

多表连贯


等值连贯

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 ;

连贯多个表

EMPLOYEES

DEPARTMENTS

LOCATIONS

连贯 n 个表, 至多须要 n- 1 个连贯条件。例如:连贯
三个表,至多须要两个连贯条件。

练习:查问出公司员工的 last_name, department_name, city

SQL99:应用 ON 子句创立连贯

天然连贯中是以具备雷同名字的列为连贯条件的。
能够应用 ON 子句指定额定的连贯条件。

这个连贯条件是与其它条件离开的。
ON 子句使语句具备更高的易读性。
Join 连贯

分类:内连贯 [inner] join on 外连贯左外连贯 left [outer] join on 右外连贯 right [outer] join on
ON 子句

SELECT bt.id,NAME,boyname

FROM beauty bt

Inner join boys b

On bt.boyfriend_id=b.id ;

连贯多个表

EMPLOYEES

DEPARTMENTS

LOCATIONS

连贯 n 个表, 至多须要 n- 1 个连贯条件。例如:连贯
三个表,至多须要两个连贯条件。

练习:查问出公司员工的 last_name, department_name, city

应用 ON 子句创立多表连贯

SELECT employee_id, city, department_name

FROM employees e

JOIN departments d

ON d.department_id = e.department_id

JOIN locations l

ON d.location_id = l.location_id;

JOIN ON JOIN ON

外连贯

beauty 表 boys 表



John 连贯总结

关键词:java 培训

正文完
 0