二〇二三-三-十五——数据库查询、单表、多表、左右连接、子查询

  1. 对象之间的关系:

    数据库建表的时候,对象之间有多种关系:

    1. 一对一: 一个同学一份作业
    2. 一对多: 一个学院有多门专业
    3. 多对一: 多个老师教同一门课
    4. 多对多: 一个同学选多门课程,一门课程多个同学选

    一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率,常常将多对多关系的表拆分成一对一关系的多张表,再通过外键实现表之间的依赖

    基本查询

    1. 基本语法

      select * from 表名;
      
    2. 列运算

      -- 查询给所有员工工资加1000的结果
      select id,name,sal+1000 from employee;
      select `id`,`name`,`age`*10 from student;
      

      1、null加任何值都等于null,,需要用到ifnull()函数。SELECT IFNULL(sal,0) from 表名; 如果薪资列为空,则输出0;
      2、将字符串做加减乘除运算,会把字符串当作0。

      IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。

    3. 别名

      select `id` `编号`,`name` `名字`,ifnull(`age`,0) as `age` from `student` as s;
      

      只需要在列名后加 as 新列名 ,或是直接加上 新列名即可。

    4. 条件控制

      条件查询:

      -- 条件控制  select * from 表名 where 列名=指定值;
      select * from student where id = 3;
      select * from student where id in (1,3,7);
      select * from student where id >5 ;
      select * from student where id between 3 and 7 ;
      select * from student where id between 6 and 7 or age > 20;
      
      

      模糊查询:

      select * from student where name like '张_'; 
      select * from student where name like '张%';
      

      (_代表匹配任意一个字符,%代表匹配0~n个任意字符)

    排序

    • 升序: asc

      select * form 表名 order by 列名 asc;     
      asc为默认值可以不写
      
    • 降序:desc

      select * from 表名 order by 列名 desc;
      
    • 使用多列作为排序条件: 当第一列排序条件相同时,根据第二列排序条件排序(当第二列依旧相同时可视情况根据第三例条件排序):

      select * from 表名 order by 列名1 asc, 列名2 desc;
      

      意思是当列名1的值相同时按照列名2的值降序排。

函数:

  • count( )
  • max( )
  • min( )
  • sum( )
  • avg( )

分组查询

select 分组列名,聚合函数1,聚合函数2 from 表名 group by 该分组列名;

分组查询前,还可以通过关键字【where】先把满足条件的人分出来,再分组

分组查询后,也可以通过关键字【having】把组信息中满足条件的组再细分出来

分页查询

使用 limit ,limit用来限定查询结果起始行以及总行数

SELECT id,name,age,gander FROM student limit 3;
# 从开始查找三条记录

SELECT id,name,age,gander FROM student limit 3,3;
# 从第三行起(不算第三行),向后查三条记录

多表查询

内连接

SELECT * from teacher t ,course c where c.t_id = t.id
SELECT * from teacher t (inner) join course c on c.t_id = t.id

内连接查询两张表的公共部分

外连接

左(外)连接
SELECT * from course c left join on teacher t c.t_id = t.id

左连接会显示 左表中存在,但在右表中值为null的行

右(外)连接
SELECT * from course c right join teacher t on c.t_id = t.id

右连接与左连接类似

子查询

select 查询出来的结果仍可作为一张表,跟在 where、having、from字段后面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值