zoukankan      html  css  js  c++  java
  • DQL查询语言-基础查询、条件查询、排序查询、多表连接查询、子查询、分页查询和联合查询

    基础查询

    SELECT  选择,过滤,查看

    语法select  查询列表  from  表名

    查询列表可以是,表中的字段,常量值,表达式,函数都可以

    查询结果是一个虚拟的表格并不存在。

    查询:

       查询字段

        查询表中单个字段例如:select last_name from 表;

        查询多个字段  select last_name,salary from 表;

        查询所有字段  select * from 表;

      查询常量:

        select   常量;  //直接来

      查询表达式:

        select 100%99;

      查询函数:

        select version();

    为字段起别名:  

      方式1:使用as关键字

        select 100%3 as 结果  from xxx;

      方式二:

        select 100%3 结果 from 表名;

    去重:

      在字段名前面添加关键字distinct

    连接字段:不能使用+号

      在mysql中的+号只能作为运算符

      如果两端都是值类型直接相加,如果一个是字符串先考虑能否转换不能就试为0,

      如果一方有NULL,结果也为NULL

      使用函数concat:

        select  concat(a,b,c) as xxx from bbb;

    查询语句分类:

      1.条件查询

    分类:
    一、条件查询: 语法: select * from a where 条件; 关键是在where这里 按照where的条件分类: 1.数学条件 条件判断符:< > <= >= != 例子:
    select *
    from a
                   where a != 1;
              2.逻辑运算符
                判断符: and(&&)就是且运算,or(||)就是或运算,not(!)就是非运算
                例子:
                    select *
                    from a
                    where a!=1 and a!=2;
              3.模糊查找:
                判断符 like,between and , in ,in not
                引入概念:
                  通配符 %,%表示通配符意思是什么都可以看例子比如容易理解
                  占位符 _, _表示是啥都可以
                like:
                  例子
                    select *
                    from a
                    where last_name like '%a';#表示最后一个是啊
                    where last_name like '%a%';#表示只要中间有a就行了
                    where last_name like 'a%'; #表示第一个是a
                    where last_name like'_a__'#第二个是a就行
                between and:
                  #调高语句的简洁度
                  例如: a>= 50 and a<=90 或 a between 50 and 120
                in:
                  例:
                    where job_id = 'aaa' OR job_id = 'bbb'
                    where job_id in ('aaa','bbb','ccc')
                is not:
                  NULL不能采用=来判断
                  所以采用is not来
                  如:coms is NULL
                  如果查到有就是 is not NULL

      2.排序查询:

    排序查询
    语法:
    select 查询列表
    
    fromwhere 筛选条件
    
    order by 排序列表[asc|desc]//desc降序
    
    #排序列表是按照排序的字段
    
    例:
    
        select *
    ​
    •   from employees
    ​
    •   order by salary desc
    按函数排序:
    length()表示长度例:
    
    SELECT  LENGTH(last_name) as 字节长度,last_name,salary
    FROM employees
    order BY    字节长度 desc;
    按多个排序字段排序
    例:
    
    SELECT salary,employee_id
    FROM employees
    ORDER BY salary asc,employee_id desc;
    先按照第一个,如果第一个的一样就按照第二个来排序
    
     
    
    特点:
    1.asc是表示升序,从上往下升序,desc降序,不写默认升序
    
    2.order by字句可以支持字段,多个字段,函数或别名
    
    3.order by一般是放在最后面的。

      3.分组查询

    分组查询
    语法:
    select  分组函数,列(出现在group by后面)
    fromwhere
    group by
    order by
    注意:
    
    分组函数和group by后出现都字段
    
    添加分组后的筛选
    在最后添加having 条件句
    
    select  分组函数,列(出现在group by后面)
    fromwhere
    group by
    order by
    having 条件
    例子:
    
    select count(*),department_id
    from employees
    goupy by department_id
    having count(*)>2
    按表达式和函数分组:
    在group by 后面使用表达式和函数就行了
    
    例如:
    
    group by length(last_name)
     
    
    按多个分段分组:
    select 分组函数,字段1,字段2
    
    ...
    
    group by 字段1,字段2
    
    添加排序:
     
    
    添加order by语句

      4.多表连接查询

     

    SQL92的连接查询
    
    连接查询
    又叫多表查询
    
     
    
    整体语法
    
    语法:
        select 查询列表
        from 表1 别名,表2 别名
        where 表1.key=表2.keyand 筛选条件】
        【group by 分组字段】
        【having 分组后的筛选】
        【order by 排序字段】
     
    
    1.等值连接
    select * from 1,2
    where 1.xx = 2.xxx
    ​
    ​
    特点1.等值连接的结果 = 多个表的交集
    2.n表连接,至少需要n-1个连接条件
    3.多个表不分主次,没有顺序要求
    4.一般为表起别名,提高阅读性和性能
     
    
    2非等值连接
    与等值连接一样,只是把中间的等号变成了其它符号
    ​
    3 自连接
    自己与自己连接来查询信息,常常需要给自己用的表取别名来方便操作
    
    例子
    
    SELECT e.last_name,m.last_name
    FROM employees e,employees m 
    WHERE e.`manager_id`=m.`employee_id`;


    sql99 连接查询

    又叫多表查询四、SQL99语法 1、内连接

    相当于查多个表的公共部分

    语法: select 查询列表 from 表1 别名

    【连接类型】join 表2 别名

    on 连接条件

    where 筛选条件 

    group by 分组列表 

    having 分组后的筛选 

    order by 排序列表

     

    分类:

    内连接 inner

    外连接:

    左外连接 left [outer]

    右外连接 right[outer]

    全外 full[outer]

    交叉连接 : cross

     

    1内连接

      用来查每个表有相同的段的时候采用,求交集部分。

      分类:

        1 等值连接:

        例子

    select last_name,department_name
    from employees e
    inner join departments d
    on e.xxx = d.xxx
    特点:
    inner可以生省略
    筛选条件在where后面
    连接条件在on后面

     

        2 非等值连接

          就把等值连接里面的on的限制条件从等于改为其它符号

        3 自连接

     

    select last_name,department_name
    from employees e
    inner join employees d
    on e.xxx = d.xxx

     

    外连接

    语法:

    select 查询列表
    from 表1 别名
    left|right|full【outer】 join 表2 别名 on 连接条件
    where 筛选条件
    group by 分组列表
    having 分组后的筛选
    order by 排序列表

    应用场景:

    用来查询一个表里有,另一个表里没有的情况。

    外连接可以看作是 = 内连接+匹配不上的NULL值

    特点:

    1.外连接的查询结果为主表中的所有记录

    如果主表和从表匹配则完全显示

    如果不匹配则显示NULL

     

     

    左右外连接

    select 查询列表
    from 表1 别名
    left|right【outer】 join 表2 别名 on 连接条件
    where 筛选条件
    group by 分组列表
    having 分组后的筛选
    order by 排序列表

    特点:

    1.如果是左连接 left 左边的表是主表

    如果是右连接right右边的表是主表

    2 左外和右外交换两个表顺序,实现同样的效果

     

    全外连接

    mysql不支持

     

    交叉连接

    就是一个笛卡尔乘积

    select b.*,p.*
    from table1 b
    cross join table2 p;
  • 相关阅读:
    关于SuperSocket启动失败
    ffmpeg 常用命令
    Url中有中文参数需要编码解码
    单例模式
    c# 文件夹重命名
    一个既有winform又有webapi 的例子
    数据库查询字段的结构和长度
    Jquery 展开收起
    ajax即时修改
    EFCore 迁移
  • 原文地址:https://www.cnblogs.com/beautiful7/p/12844502.html
Copyright © 2011-2022 走看看