zoukankan      html  css  js  c++  java
  • 外键的变种,单表的查询,多表的查询

    1,表的三种对应关系:

    1.1>一对多:比如一个出版社可以出多种书.

    同样的,先建立主表,在建立从表,插入数据也是先插入主表的数据,在插入从表的数据.

    1.2>多对多的对应关系:一个作者可以写多本数,一本书也可以被多个作者写

    当有多对多的对用关系的时候,需要借助于第三章表来表明二者的对应关系.

    对于多对多的建立表,需要先把主表创建出来,再创建从表 ,插入数据也是一样的,当多对多第三章表插入数据的时候,需要和每一个主表都要有外键(在这里相当于是两个表之间联系的桥梁.)

    1.3>一对一,就是一一建立对应关系在谁那设置外键都可以. 

    2,单表查询(重中之重)

    语句:select 字段1, 字段2...from 表名

              where 条件

              group by filed

              having 筛选

              order by filed

              limit 限制条件

    重点中的重点:关键字的执行优先级

    from

    where

    group by

    having

    select

    distinct

    order  by

    limit

    1,找到表:from

    2,拿着where指定的约束条件,去文件/表中取出一条条记录

    3,将取出的一条条记录进行分组group by,如果没有group by,则整体做为一组

    4,将分组的结果进行having过滤

    5,执行select

    6,去重

    7,将结果按条件排序:order by

    8,限制结果的显示条数

    2.1>where约束

    #where 字句中可以使用
    1,比较运算符:>,<,>=,<=,<>,!=
    2,范围值between 80 and 100:表示在80~100之间
    3,in (80,90,100)值是10或20或30
    4,like "xiaomagepattern":pattern可以是$或者_.%表示多字符,_表示一个字符
    5,逻辑运算:在多个条件直接可以使用逻辑运算符 and or not

    2.2>单条件查询

    mysql> select id,name from employee where id > 5;

    2.3>多条件查询

    mysql> select name from employee where post='teacher' and salary>10000;

    2.4>关键字查询:

    select name,salary from employee where  salary  between 10000 and   20000;
    
    
    select name,salary from employee where salary not  beyween  10000 and 2000;  
    #在这里""是表示空的字符串,不是null
    select name,post_comment from employee  where  post_comment= "";
    此时得到的结果是:查不到
    当执行下边的指令的时候:
    update employee set post_comment = ""  where id = 2;
    就可以查到结果了.

    2.5>关键字in集合查询

    mysql>  SELECT name,salary FROM employee WHERE salary=3000 OR salary=3500 OR salary=4000 OR salary=9000 ;

    2.6>关键字like模糊查询(通配符"%表示后边可以跟多个字符,通配符"_"表示后边陪一个字符")

    mysql> SELECT * FROM employee WHERE name LIKE 'liang%';

    3,分组查询:group by

    要设置:mysql> set global sql_mode='only_full_group_by';

    并查看是否设置成功:mysql> select @@gloabl.sql_mode;

    设置完以后,一定要退出,重新进入.然后登录才有效.

     同过group by分组以后,只能查看当前字段,如果想要查看组内信息,需要借助于聚合函数.

    4,聚合函数

    max()求最大值  min()求最小值  avg()求平均值  

    sum()求和  count()求总个数

    ###聚合函数聚合的是组内的内容, 若是没有分组则默认是一组.

    #每个部门有多少员工
    select post,count(id) from employee group by post;

    #每个部门的最高薪水
    select post ,max(salary) from  employee  group by post;

    #每个部门最低薪水
    select post,min(salary) from employee group by poost;

    #每个部门的平均薪资
    select post,avg(salary) from employee group by post;

    #每个部门的锁有薪水总和
    select post,sum(salary)  from employee  group by post;

    #查看每个部门的所有人,
    select post, group_concat(name) from employee group by post;

    #查询每个部门的男员工数和女员工数
    select post,count("male"),count("female") from employee group by post;

    5,having:过滤的意思

    having是发生在group by 之后,所以having中可以使用分组的字段,无法直接去到其他字段,可以使用聚合函数.

    1. 查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数
    2. 查询各岗位平均薪资大于10000的岗位名、平均工资
    3. 查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资

    6,order by查询排序

    6.1>按单列查询:

      select * from employee order by age;

      select * from employee order by ASC;

      select * from employee order by DESC;

    6.2>按多列查询:先按照age升序,如果年纪相同,则按照id降序

      select * from employee

        order by age ASC(升序),

          id DESC(降序);

    select * from  employee order by asc,hire_date desc;

    7,limit限制查询的记录数:

    select * from employee order by salary  desc limit 3;

    表示按照薪资倒序,并取前三位.

    select  * from employee order by salary desc limit 0,5;

    表示从0开始查,,查出钱5条数据

    select * from employee order by salary desc limit 5,5;

    表示查出从第6要数据开始再查5条数据

    #分页操作
     mysql> select * from  employee limit 0,5;
    
    mysql> select * from  employee limit 5,5;
    mysql> select * from  employee limit 10,5;
    mysql> select * from  employee limit 15,5;

     ###查出来的任何表都是虚拟的表,当关闭服务器,或者退出,都将不存在.###

      

  • 相关阅读:
    upgrade和update的区别
    批处理文件的几种路径扩展
    CMD does not support UNC paths as current directories.的巧妙解决方案
    让批处理不回显错误信息
    python中那纠结的os.system()与空格处理
    jQuery Mobel 学习相关资料整理(一)
    c#获取某月的第一天和某月的最后一天
    Umbraco网站制作(七) 调用外部用户控件
    Umbraco网站制作(八) 实现伪静态
    Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。
  • 原文地址:https://www.cnblogs.com/ljc-0923/p/9801310.html
Copyright © 2011-2022 走看看