MySQL(3)查询数据

select语句查询

单表查询
  1. 查询所有字段:
    SELECT *
    FROM 表名;
  2. 查询指定字段:
    SELECT 属性名1,属性名2,…
    FROM 表名;
  3. 查询指定记录:
    根据要求写合适的筛选条件
    SELECT *
    FROM 表名
    WHERE 筛选条件;
    或者
    SELECT 属性名1,属性名2,…
    FROM 表名
    WHERE 筛选条件;
  4. 带IN关键字的查询
    例:查询ex表id取值为1001或1002的记录:select * from ex where id in(1001,1002);
    例:查询ex表name不是“张三”和“李四”的记录:select * from ex where name not in (“张三”,“李四”);
  5. 带 BETWEEN AND 的范围查询:
    例:查询ex表age字段年龄大于等于15,小于等于20的记录:
    select * from ex where age between 15 and 20;
    例:查询ex表age字段年龄小于15,大于20的记录:
    select * from ex where age not between 15 and 20;
  6. 带LIKE的查询:
  • % : 代表任意数量个任意字符
  • _ : 代表一个任意字符
    名字最后一个字是明的
    select * from student where name like ‘%明’;
    名字第一个字是小的
    select * from student where name like ‘小%’;
    名字中间有一个字是红的的
    select * from student where name like ‘%红%’;
    名字第一个字是小的 并且只显示前3个人
    • limit off,len;
    • off 数据的起始位置
    • len ; 数据的长度
    • 如果off = 0 则可以省略
      select * from student where name like ‘小%’ limit 3;
      order by 属性名 :表示查询出的数据按照这个属性进行排序
      名字中间带安的
      select * from student where name like ‘%安%’;
      这个 人名字一共三个字
      select * from student where name like ‘’;
    1. 查询空值:
      例:查询ex表age字段为空值的记录:
      select * from ex where age is NULL;
      例:查询ex表age字段不为空值的记录:
      select * from ex where age is NOT NULL;

order by 属性 排序 order by 之后跟哪一个属性就是按照哪一个属性进行排序 (升序排列)
order by 属性 desc 降序排列
order by 属性 asc 升序排列) 默认就是升序排列 所有asc可以不加
select * from student where name like ‘小%’ order by age;
根据某个属性排序 order by 属性 默认升序
按照某个属性分组:group by 属性 分组

  • group by 与having一起使用,可以限制输出的结果。
  • having条件表达式作用于分组后的记录,用于选择满足条件的组。
  • group by 和where 不能同时使用,如果之后要添加筛选条件的话需用having连接。例:
  • select sex,count(sex)
    from ex
    group by sex
    having count(sex)>=3;
集合函数查询
  1. COUNT()函数:
  • 统计ex表的记录数:select count(*) from ex;
  1. SUM()函数:
  • 统计grade表中学号为1001的学生的总成绩:select id,sum(score) from grade where id=1001;
  1. AVG()函数:
  • 计算ex表中平均年龄:select AVG(age) from ex;
  1. MAX()函数:
  • 查询ex表中的最大年龄:select MAX(age) from ex;
    5.MIN()函数:
  • 查询ex表中的最小年龄:select MIN(age) from ex;
连接查询

如果所要查询的数据分布在多张表中这时我就要使用联合查询或者子查询。
联合查询(连接查询):把多张表联合(连接)在一起查询出我们想要的数据。
如何联合(连接):这多张表中必须有意义相同的字段。
意义相同的字段 : EX

  1. 内连接:
    能够把多挣表中意义相同字段相等时的那部分数据查出来。
    语法:
    (1)select 表1.属性名,… 表3.* from 表1,表2,表3…
    where 表1.EX = 表2.EX and 表2.EX = 表3.EX and 表3.EX =表4.EX …;
    select a.属性名,… c.* from 表1 a,表2 b,表3 c…
    where a.EX = b.EX and b.EX = c.EX and c.EX =d.EX …;
    (2) (inner) join 括号表示可以省略
    select 表1.属性名,… 表3.* from 表1 (inner)join 表2 on 表1.EX = 表2.EX (inner)join 表3 on
    表2.EX = 表3.EX …;
    select 表1.属性名,… 表3.* from 表1 a (inner) join 表2 b on a.EX = b.EX (inner) join 表3 c on
    b.EX = c.EX …;

  2. 外连接查询:

  • 左连接查询
    select 表1.属性名,… 表3.* from 表1 left join 表2 on 表1.EX = 表2.EX left join 表3 on
    表2.EX = 表3.EX …;
    select 表1.属性名,… 表3.* from 表1 a leftjoin 表2 b on a.EX = b.EX left join 表3 c on
    b.EX = c.EX …;
  • 右连接查询
    select 表1.属性名,… 表3.* from 表1 right join 表2 on 表1.EX = 表2.EX right join 表3 on
    表2.EX = 表3.EX …;
    select 表1.属性名,… 表3.* from 表1 a right 表2 b on a.EX = b.EX right join 表3 c on
    b.EX = c.EX …;
子查询
  1. 带IN关键字的子查询:
  • 查询employee表中d_id字段的值必须在department表中出现过:
  • select * from employee
    where d_id in ( select d_id from department);
  1. 带比较运算符的子查询:
  • 查询没有24岁的员工的部门信息
    select d.*
    from department as d,employee as e
    where d.cid=e.did and e.age!=24;
  1. 带exists关键字的子查询:
  • 如果有1004这个部门则获取所有人的用户信息
    select e.*
    from employee as e
    where exists(select d.dname
    from department as d
    where d.cid=1004);
  1. 带any关键字的子查询:
  • 查询将所有获奖的员工学生信息
    select *
    from computer_stu
    where score>=ANY(select score
    from scholarship);
  1. 带ALL关键字的子查询:
  • 从computer表中查询哪些人的分数高于所有奖学金的最低分。
  • select *
    from computer
    where score>=ALL( select score from scholarship);
合并查询:
  • 使用UNION关键字时,数据库系统会将所有的查询结果合并到一起,然后去除相同的记录。而UNION ALL关键字则只是简单的合并到一起。
  • 将department和employee中所有出现的部门编号展示出来
    select cid from department
    union
    select did from employee;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值