学习日记28--MySQL学习2

查询和筛选数据
  1. select * from 表名 where 条件;
    from关键字后面写表名,表示数据来源于是这张表
    select后面写表中的列名,如果是*表示在结果中显示表中所有列
    在select后面的列名部分,可以使用as为列起别名,这个别名出现在结果集中
    如果要查询多个列,之间使用逗号分隔
  2. 消除重复行
    在select后面列前使用distinct可以消除重复的行
    select distinct gender from students;
  3. 比较运算符
    等于=
    大于>
    大于等于>=
    小于<
    小于等于<=
    不等于!=或<>
  4. 逻辑运算符
    and //筛选条件更严苛
    or //筛选范围变大
    not
  5. 范围查询
    in表示在一个非连续的范围内:
    select * from 表名 where id in(1,3,8);
    between … and …表示在一个连续的范围内
    select * from 表名 where id between 3 and 8;
  6. 模糊查询
    like
    %表示任意多个任意字符
    _表示一个任意字符
    例:where sname like ‘黄%’ ; where sname like ‘黄_’ or sname like ‘%靖%’;
  7. 空判断
    null与”是不同的
    查询没有填写地址的学生
    select * from students where hometown is null;
    查询填写了地址的学生
    select * from students where hometown is not null;
  8. 优先级
    小括号,not,比较运算符,逻辑运算符
聚合函数
  1. count(*)计算总行数, max(列) , min(列), sum(列),avg(列)
    例子:select count(*) from 表名 where isdelete=0;
    select max(id) from students where isdelete=0 and gender=0;
    select sum(id) from 表名 where …
    select avg(id) from 表名 where …

  2. 子查询:将聚合函数与查询语句嵌套
    select * from students where id = (select min(id) from students where isdelete = 0);

分组
  1. 对分组后的数据进行聚合函数统计:
    select gender [as 别名] ,count(*) from 表名 group by gender;
  2. having后面的条件运算符与where的相同:
    方案一
    select count(*)
    from students
    where gender=1; //对原数据集进行筛选
    方案二:
    select gender as 性别,count(*)
    from students
    group by gender
    having gender=1; //对筛选之后的数据集进行筛选(增加判断条件)
    或:
    select gender,count(*) as rs from students group by gender having rs>2;//as 取别名
排序
  1. select * from 表名
    order by 列1 asc|desc,列2 asc|desc,…
    将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推
    默认按照列值从小到大排列
    asc从小到大排列,即升序
    desc从大到小排序,即降序
    例:select * from students where gender=1 and isdelete=0 order by id desc;
分页
  1. select * from 表名 limit start,count
    从start开始,获取count条数据,start索引从0开始
    例子:select * from students limit 1,3; 表示从第2个数据开始取3个
外键连接
  1. 新建一个表格 create table scores(
    id int primary key auto_increment,
    stuid int, //与外键对应的键
    foreign key(stuid) references students(id) //建立连接
    );
  2. 在删除students表的数据时,如果这个id值在scores中已经存在,则会抛出异常。
  3. 级联操作:如果主表的记录删掉,则从表中相关的记录都将被删除。
  4. 连接查询:select students.name, scores.score from scores inner join students on scores.stuid = students.id; //内连接,查询表的顺序不分
    select * from students left join scores on students.id = scores.stuid // 左连接,以left左侧表数据为主数据;
    <==>select * from scores right join students on scores.stuid= students.id // 右连接,以right右侧表数据为主数据;
小结

select distinct 列*
from 表1 inner|left|right join 表2 on 表1与表2的关系
where …
group by …having …
order by… asc|dese
limit start,count

猜你喜欢

转载自blog.csdn.net/dershine/article/details/81735183