mysql语法汇总一DQL(1)

本文详细介绍了SQL的基础查询语法,包括选择查询列表、条件查询、排序查询及常用函数的使用。同时,讲解了分组查询、分组函数的应用,并探讨了连接查询的不同类型,如内连接、外连接等。通过实例展示了如何避免笛卡尔乘积问题和如何进行多表查询。此外,还涵盖了SQL99的连接查询语法,包括筛选、分组和排序的综合运用。

1 基础查询

select 查询列表 from 表名;

例:SELECT last_name FROM employees;

  SELECT * FROM employees;

SELECT DISTINCT department_id FROM employees;(去重)

查询员工名和姓连接成一个字段,并显示为 姓名

SELECT 

    CONCAT(last_name,first_name) AS 姓名

FROM

    employees;

2 条件查询   

语法:

    select 

        查询列表

    from

        表名

    where

        筛选条件;

     一、按条件表达式筛选

    简单条件运算符:> < = != <> >= <=(注意这里的等于为= 而不是==,不等于为<>

     二、按逻辑表达式筛选

    逻辑运算符:

    作用:用于连接条件表达式

        && || !

        and or not 

    &&和and:两个条件都为true,结果为true,反之为false

    ||或or: 只要有一个条件为true,结果为true,反之为false

    !或not: 如果连接的条件本身为false,结果为true,反之为false

    三、模糊查询

        like

        between and

        in

        is null

查询部门编号不是在90到110之间,或者工资高于15000的员工信息

SELECT

    *

FROM

    employees

WHERE

    NOT(department_id>=90 AND  department_id<=110) OR salary>15000;

3 排序查询

/*

语法:

select 查询列表

from 表名

【where  筛选条件】

order by 排序的字段或表达式;

特点:

    1、asc代表的是升序,可以省略

    desc代表的是降序

   2、order by子句可以支持 单个字段、别名、表达式、函数、多个字段

   3、order by子句在查询语句的最后面,除了limit子句 

  案例:查询部门编号>=90的员工信息,并按员工编号降序

 SELECT *

  FROM employees

 WHERE department_id>=90

 ORDER BY employee_id DESC;

4 常见函数

  常见函数:

    一、单行函数

    字符函数:

    length:获取字节个数(utf-8一个汉字代表3个字节,gbk为2个字节)

    concat

    substr

    instr

    trim

    upper

    lower

    lpad

    rpad

    replace

    

    数学函数:

    round

    ceil

    floor

    truncate

    mod

    

    日期函数:

    now

    curdate

    curtime

    year

    month

    monthname

    day

    hour

    minute

    second

    str_to_date

    date_format

    其他函数:

    version

    database

    user

    控制函数

    if

    case

 例:

  .lpad 用指定的字符实现左填充指定长度

 SELECT LPAD('殷素素',2,'*') AS out_put;

   rpad 用指定的字符实现右填充指定长度

  ELECT RPAD('殷素素',12,'ab') AS out_put;

5.1 分组查询

 语法:

 select 查询列表

 from 表

【where 筛选条件】

 group by 分组的字段

【order by 排序的字段】;

        例:

查询每个工种的员工平均工资

SELECT AVG(salary),job_id

FROM employees

GROUP BY job_id;

5.2 分组函数

分类:

sum 求和、avg 平均值、max 最大值 、min 最小值 、count 计算个数

特点:

1、sum、avg一般用于处理数值型

   max、min、count可以处理任何类型

2、以上分组函数都忽略null值

3、可以和distinct搭配实现去重的运算

4、count函数的单独介绍

一般使用count(*)用作统计行数

5、和分组函数一同查询的字段要求是group by后的字段

 例:ELECT SUM(salary) 和,AVG(salary) 平均,MAX(salary) 最高,MIN(salary) 最   低,COUNT(salary) 个   数 FROM employees;

6.1连接查询

  含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询

  笛卡尔乘积现象:表1 有m行,表2有n行,结果=m*n行

  发生原因:没有有效的连接条件

  如何避免:添加有效的连接条件

  例:查询女神名和对应的男神名

  SELECT NAME,boyName 

  FROM boys,beauty

  WHERE beauty.boyfriend_id= boys.id;

  查询城市名中第二个字符为o的部门名和城市名

  SELECT department_name,city

  FROM departments d,locations l

  WHERE d.`location_id` = l.`location_id`

  AND city LIKE '_o%';

6.2  sql99语

 语法:

    select 查询列表

    from 表1 别名 【连接类型】

    join 表2 别名 

    on 连接条件

    【where 筛选条件】

    【group by 分组】

    【having 筛选条件】

    【order by 排序列表】

分类:

内连接(★):inner

外连接

    左外(★):left 【outer】

    右外(★):right 【outer】

    全外:full【outer】

 交叉连接:cross 

 例:

 查询名字中包含e的员工名和工种名(添加筛选)

 SELECT last_name,job_title

 FROM employees e

 INNER JOIN jobs j

 ON e.`job_id`=  j.`job_id`

 WHERE e.`last_name` LIKE '%e%';

 例: 查询部门个数>3的城市名和部门个数,(添加分组+筛选)

 #①查询每个城市的部门个数

 #②在①结果上筛选满足条件的

 SELECT city,COUNT(*) 部门个数

 FROM departments d

 INNER JOIN locations l

 ON d.`location_id`=l.`location_id`

 GROUP BY city

 HAVING COUNT(*)>3;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值