MYSQL复习(二)公共表表达式(CTE)

1、MYSQL公共表表达式(CTE):

理解:公用表表达式是一个命名的临时结果集,仅在单个SQL语句(例如SELECTINSERTUPDATEDELETE)的执行范围内存在。

语法:

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  outerjoin  2(右表)  on  连接条件

含义:

其实就是将两个表的内连接的结果,再加上左边表的不符合内连接所设定的条件的那些数据的结果;

 

图解:

(3)右(外)连接 right (outer) join

形式:

1(左表)  right  outerjoin  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

load  data(载入数据)语法:

载入一个纯文本的纯数据文件;其中每一行数据以换行符为分割,一行中的数据项(字段值),以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运算符:空值和布尔值的判断

is  null,   is  not  null,   is  true,   is  false

between运算符:范围判断

XX  between  1  and  2

in运算符:给定确定数据的范围判断

XX  in  (值1,值2....

like运算符:对字符串进行模糊查找

XX  like  ‘要查找的字符’

要查找的字符  要想发挥作用,就必须依赖于以下两个特殊字符:

% :代表任意个数的任意字符

_ :代表一个任意字符

group by 子句:分组

什么叫做分组?

就是对若干条“原始数据行”,以某种标准(字段值),来进行“分类”。则分完了之后,自热,就会构成以该字段值为特征的“小组”,每个小组一定是具有相同的该字段的值;

但,注意:

分组之后,只有组信息,而且,每一组,在结果集中,就是一行;

具体来说,有如下信息可用(就是出现在select的输出部分):

1,分组依据字段本身;

2,每一组的“数量信息”:用count(*)来取得;

3,数值型字段的以下几个“统计值”(聚合计算值):

max(XX),  min(XX),  avg(XX),  sum(XX);

having子句

类似where的作用和使用语法,但其只针对groupby分组之后的“组信息”进行筛选;

order  by 子句:对前述数据以某种指定的方式进行排序(ASCDESC);

limit子句

对前述数据,以指定的行号开始取出多少行;行号是从0开始算起的连续的整数数字,跟数据本身中的字段值没有关系





猜你喜欢

转载自blog.csdn.net/u014252478/article/details/80324011