数据库外联

本文介绍了MySQL数据库的查询操作,包括Union与Union All的区别、常用函数的使用,如日期时间函数、字符串处理函数,以及行转列和连接查询的方法,如内连接、左连接和右连接。

1、 Union 与 Union all
    合并查询,合并查询的结果
        Union 会去除重复项
        Union all 不会去除重复项
2. 常用函数
    select version() ;显示当前MySQL软件的版本
    select database();显示当前所处数据库是哪个
    select  char_length('中国');返回字符个数。
    select  length('中国');返回字符所占字节数,MySQL中,一个UTF8编码的汉字占3个字节
    select  concat(  'a',  'b',  'c',  'd');返回  'abcd'。字符串拼接函数
    select  concat_ws(  '=',  'a',  'b',  'c');返回  'a=b=c'。字符串拼接函数,第一个是拼接间隔符
    select   upper('abcd');返回ABCD。将参数中所有小写字母转换为大写
    select  lower('ABCD');返回abcd。将参数中所有大写字母转换为小写
    select  substring(  '系统信息类',  1,  3  );返回  系统信。第2个参数代表从1开始的第几个字符,第3个参数代表截取字符个数
    select  trim('  abc  ');返回 abc。用于删去参数左右的所有空格
    select  curdate();返回当前日期
    select  curtime();返回当前时间
    select  now();返回当前日期时间
    select  unix_timestamp();返回当前日期时间对应的时间戳(单位秒)
    select  unix_timestamp('2018-05-24 20:00:00');返回参数指定的日期时间对应的时间戳(单位秒)
    select  from_unixtime(1527163397);返回参数指定时间戳(单位秒)对应的日期时间
    select  datediff(  '2018-05-23',  now()  );返回两个参数对应日期相差的天数(用第一个参数减第二个参数)
    select  adddate( now(), -2 );返回指定天数前/后的日期时间(第一个参数是日期时间,第二个参数是天数,向后加是正数,向前减是负数)
    select year('2019-02-24');返回2019 获得年份
    select month('2019-02-24')  返回2 获得月份
    select day('2019-02-24')  返回 24 获取日
    select  if(  <判断条件>,  <条件为真时的返回值>,  <条件为假时的返回值>  );相当于Java中的三目运算符<判断条件>  ?  <条件为真的返回值>  :  <条件为假的返回值>。
    如select  if(1=1,  2,  3);返回2。
    select  ifnull(<表达式或者字段>,  <表达式或者字段为NULL时的返回值>);通常用于给有可能有NULL的情况下的提供默认值。
    select ifnull(null,'无名氏') ; null这里可以写列名 就会把该列值为null的 以无名氏显示
    select ifnull(name,'无名氏') from teacher ;
3. 行转列
        (多行,多列)
    select name,max(
    case course
    when 'java' then score
    end) Java, max(
    case course
    when 'MySQL' then score
    end) MySQL
    from test_9
    group by name;
        (一行,一列)
    select name,
    group_concat(course,'=',score order by course asc  separator ' | ') as '各科成绩'
    from test_9 group by name;
4. 连接查询    
    4.1 笛卡儿积
        笛卡尔积,也有的叫笛卡尔乘积
        多表查询中,链接的where限定条件,不能少于 表的个数-1 , 否则就会发生笛卡尔乘积 , 这个限定条件并不是随便一个限定条件,
    而是用于维护映射两个表的条件,比如 外键
        笛卡尔乘积是一个很消耗内存的运算,笛卡尔积产生的新表,行数是原来两个表行数的乘积,列数是原来两个表列数的和。所以我们在
    表连接时要使用一些优化手段,避免出现笛卡尔乘积。
    4.2 innerjoin
        数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
    在使用 join 连接查询 时,on和where条件的区别如下:
    1、on条件是在生成临时表时使用的条件,需要和链接查询一起使用。
    2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
    4.3 left join
        left join on : 左连接,又称左外链接,是 left outer join 的简写 ,使用left join 和 使用 left outer join 是一样的效果
    以左边的表为基准,左表中数据都有,右表中不符合条件的就没有,就在指定列上用null代替
    4.4 right join
        right join on : 右链接,又称右外连接,是 right outer join 的简写,使用right join 和 使用 right outer join 是一样的
    以右表为基准,右表中数据都有,左表中不符合条件的就没有,就在指定列上用null代替。
 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值