1、MYSQL公共表表达式(CTE):
理解:公用表表达式是一个命名的临时结果集,仅在单个SQL语句(例如SELECT,INSERT,UPDATE或DELETE)的执行范围内存在。
语法:
WITH 公用表名 (column_list) AS ( // column_list涉及到的列名(可选)
查询语句)SELECT * FROM 公用表名;
或
WITH cte_name (column_list) AS ( query ) SELECT * FROM cte_name;
举例:
WITH customers_in_usa AS (
SELECT
customerName, state
FROM
customers
WHERE
country = 'USA'
) SELECT
customerName
FROM
customers_in_usa
WHERE
state = 'CA'
ORDER BY customerName;
功能:查询customerName
公用表名:customers_in_usa
表的状态state=‘CA’;
这两个数据(customerName, state),在country为(USA)状态下的数据。
查询结果:
举例2:
WITH salesrep AS (
SELECT
employeeNumber,
CONCAT(firstName, ' ', lastName) AS salesrepName
FROM
employees
WHERE
jobTitle = 'Sales Rep'
),
customer_salesrep AS (
SELECT
customerName, salesrepName
FROM
customers
INNER JOIN
salesrep ON employeeNumber = salesrepEmployeeNumber
)
SELECT
*
FROM
customer_salesrep
ORDER BY customerName;
CONCAT将字段连接在一起,并起名salesrepname
JOIN联表查询,多张表连起来
INNER JOIN内联,将customer和salesrep连接, ON后面跟着条件
(1)内连接 inner join:
形式:
select * from 表1 【inner】 join 表2 on 连接条件;
先来研究没有条件的“内连接”(其实就是交叉连接)的结果:
图解:
(2)左(外)连接 left (outer) join:
形式:
表1(左表) left 【outer】 join 表2(右表) on 连接条件
含义:
其实就是将两个表的内连接的结果,再加上左边表的不符合内连接所设定的条件的那些数据的结果;
图解:
(3)右(外)连接 right (outer) join:
形式:
表1(左表) right 【outer】 join 表2(右表) on 连接条件
含义:
其实就是将两个表的内连接的结果,再加上右边表的不符合内连接所设定的条件的那些数据的结果;
举例:
图解:
(4)全(外)连接 full (outer) join:
形式:
没有形式,因为mysql不支持全连接的语法;
含义:
其实就是将两个表的内连接的结果,再加上左边表的不符合内连接所设定的条件的那些数据的结果,以及再加上右边表的不符合内连接所设定的条件的那些数据的结果;
2、数据基本操作语句
插入数据(增):
insert into 表名 (字段1,字段2,....) values (值a1,值a2,....),(值b1,值b2,....),(...);
replace into 表名 (字段1,字段2,....) values (值a1,值a2,....),(值b1,值b2,....),(...);
insert into 表名 set 字段1=值1,字段2=值2, .....;
insert into 表名 (字段1,字段2,....) select 字段1,字段2,.... from 表名2;
载入一个纯文本的纯数据文件;其中每一行数据以换行符为分割,一行中的数据项(字段值),以“tab”符号位分割符;
delete from 表名 where 条件 【order by排序】 【limit 数量】
update 表名 set 字段1=值1,字段2=值2, ..... where 条件
3、数据库基本查询
select [all | distinct] 字段或表达式列表 【from子句】【where子句】【group by子句】【having】
【order by子句】 【limit子句】
字段必然是来源于“数据源”(表);
每个字段或表达式,都可以对其“取别名”: XX as 别名
from子句:就是数据源;
where子句:是对数据源的每一行数据进行的某种条件筛选;
is null, is not null, is true, is false
XX between 值1 and 值2;
XX in (值1,值2, .... )
XX like ‘要查找的字符’
要查找的字符 要想发挥作用,就必须依赖于以下两个特殊字符:
% :代表任意个数的任意字符
_ :代表一个任意字符
就是对若干条“原始数据行”,以某种标准(字段值),来进行“分类”。则分完了之后,自热,就会构成以该字段值为特征的“小组”,每个小组一定是具有相同的该字段的值;
但,注意:
分组之后,只有组信息,而且,每一组,在结果集中,就是一行;
具体来说,有如下信息可用(就是出现在select的输出部分):
1,分组依据字段本身;
2,每一组的“数量信息”:用count(*)来取得;
3,数值型字段的以下几个“统计值”(聚合计算值):
max(XX), min(XX), avg(XX), sum(XX);
类似where的作用和使用语法,但其只针对groupby分组之后的“组信息”进行筛选;
order by 子句:对前述数据以某种指定的方式进行排序(ASC,DESC);
对前述数据,以指定的行号开始取出多少行;行号是从0开始算起的连续的整数数字,跟数据本身中的字段值没有关系