zoukankan      html  css  js  c++  java
  • mysql-查询

    select查询

    select查询语句:
    语法:
    (
        select field_name ...
        from tb_name
        where 查询条件
        group by field_name ...   having 过滤条件  (分组查询和分组查询过滤)
        order by field_name asc(升序) desc(降序)   (查询结果排序)
        limit
    )

    wherehaving 都有条件判断的功能(过滤)
    区别:
        where 是在分组之前进行过滤
        haing 是在分组之后进行过滤

    
    1、条件查询:
    select field_name ... from tb_name ... where field_name>values;  返回field_name 大于 values 的记录
    select field_name ... from tb_name ... where field_name in(value1,value2, ... );  返回 field_name 等于 value 中的一个的记录。
    select field_name ... from tb_name ... where field_name not in(value1,value2 ...);  返回field_name 不在其中的记录。
    select field_name ... from tb_name ... where field_name between value1 and value2; 返回field_name 的value 在value1 和 value2 之间的记录。
    select field_name ... from tb_name ... where field_name not between value1 and value2; 返回field_name 的value 不在value1 和value2 之间的记录。
    
    
    2、模糊查询:
    select field_name ... from tb_name ... where field_name like 'a%b/a_b';  其中:% 表示多个任意字符,_ 表示一个任意字符。(查询field_name以a开头,以b结尾的所有记录)
    
    3、空值查询:
    select field_name ... from tb_name ... where field_name is null;
    
    eg:
    select * from massege where 总分 between 550 and 600;
    select * from massege where 总分 not between 500 and 600;
    select * from massege where 总分 like '5%';
    select * from massege where 总分 like '__5';
    
    4、查询结果去重:distinct
    select distinct field_name from tb_name;
    
    5、分组查询:
    select field_name as total from tb_name group by field_name;
    
    select age,count(2) as'姓名' from stu_temp group by age;   count(1)/count(*) 都是统计数据的
    
    select age,group_concat(name) as'姓名' from stu_temp group by age; group_concat(field_name)显示该组中的全部field_name。
    
    select age,group_concat(name) as'姓名' from stu_temp group by age having count(name)>3;  having count(field_name)>values 过滤掉count(field_name)<values 的分组,只显示大于的分组。
    
    
    select age,count(2) as'姓名' from stu_temp group by age with rollup;  rollup 统计归纳。
    
    6、分页查询:
    
    
    
    
    
    
    
    
    
    create table stu_temp(
    id int(10) unsigned primary key auto_increment,
    name varchar(20) not null,
    age int(10) not null
    );
    
    insert into stu_temp values(null,'qqq',19),(null,'www',20),(null,'eee',18),(null,'aaa',19)
    ,(null,'sss',20),(null,'ddd',18),(null,'zzz',20),(null,'xxx',19),(null,'ccc',20),(null,'vvv',18);
    
    
    insert into product values(null,'qqq','20170601'),(null,'www','20170602'),(null,'eee','20170603'),(null,'aaa','20170601'),(null,'qqq','20170601');

     

     

     

    子查询:

    笛卡尔积:两个表的所有行组合以后构成的结果集。

    交叉查询
    select *
    from employee
    cross join department;
    
    等价于:
    select * 
    from employee,department;

     

     

    内连接查询 :返回符合 on 后面的查询条件的rows

    inner join (内连接):基于联合条件进行的多表查询。匹配多个表中的行,并且允许你去查询在两个表中都包含的列的行。它被直接用在from的后面
    inner join 的使用条件:
                        1、在from 后面指定主表
                        2、指定和主表连接的表,理论上,你可以联合多个表,但是为了更好的查询,应该限制表的个数
                        3、指定联合条件,联合条件应该在 inner join  的关键字 on 的后面。联合条件值匹配多表的规则。 
    SELECT employee.`name` as '姓名' ,department.`name` as '部门'
    FROM employee
    INNER JOIN department on department.id=employee.dep_id
    WHERE department.id=4;
    
    SELECT e.`name` as '姓名' ,d.`name` as '部门'     这里是利用 as 为表其了别名(as 可以省略)
    FROM employee as e
    INNER JOIN department as d on d.id=e.dep_id
    WHERE d.id=4;

     

     

    左外连接查询(left [outer] join):返回左表的所有rows和右表中与左表符合查询条件的所有rows

    select e.`name` as '姓名',d.name as '年龄'
    from employee as e
    left join department as d on e.dep_id=d.id;

     

     

    右外连接查询(right [outer] join):返回右表的所有rows和左表中与右表符合查询条件的所有rows

    select e.`name` as '姓名',d.name as '年龄'
    from employee as e
    right join department as d on e.dep_id=d.id;

     

     

    全外连接查询(full [outer] join):返回 

    select e.`name` as '姓名',d.name as '年龄'
    from employee as e
    full join department as d on e.dep_id=d.id;
    但:mysql 不支持 full [outer] join 语法,使用下列语法代替全外连接
    (既:将左外连接和右外连接用 union 合并,就是 mysql 的全外连接)
    select *
    from `employee`
    left join `department` on `employee`.dep_id=`department`.id
    union
    select * 
    from `employee`
    right join `department` on `employee`.dep_id=`department`.id;

     

  • 相关阅读:
    osharp3引入事务后操作结果类别的调整
    Code First 迁移
    表达式拼接Expression<Func<IEntityMapper, bool>> predicate
    ASP.NET中Session的sessionState 4种mode模式
    EF Code First Migrations数据库迁移
    啊里大鱼短信发送API
    asp.net服务器控件的生命周期
    osharp3使用经验:整合DbContextScope 文章 1
    关于MarshalByRefObject的解释
    数据库操作事务IsolationLevel 枚举
  • 原文地址:https://www.cnblogs.com/oural-yan/p/6952716.html
Copyright © 2011-2022 走看看