mysql使用DQL查询数据

  1. 数据查询语句进行查询

    (1)使用select语句进行查询

    语法select<列名|表达式|函数|常量>

    From <表名>

    [where <查询条件表达式>]

    [order by <排序的列名>[asc或desc]];

    (2) 查询所有数据行或列

    Select *from 表名;

    (3 )查询部分行或列

    Select 字段1,....,字段n from 表名 where 条件;

    (4)查询使用列的别名

    Select 字段1 as 字段1别名,字段n as 字段n别名 from 表名 where条件;

    (5) 查询空值

    Select 字段 from 表名 where 字段is null;

    (6)在查询中使用常量列

    Select 字段 as字段别名,’字段名’ as 字段名 from 表名 ;

  2. (1)聚合函数

    Avg()返回字段平均数 count()返回字段行数max()最大值

    Min()最小值 sum()某字段的和

    例:Select sum(studentresult)from result;

    (2)字符串函数

    Concat(str1,...,strn)连接字符串

    Insert(str,pos,len,newstr)pos为从什么位置开始

    Lower(str)所有变小写

    Upper(str)所有变大写

    Substring(str,num,len)返回字符串str的第num个位置开始长度为len

    的子字符串

    例:select upper(studentname)from student;

    (3)时间日期函数 例:在前面加select now();

    Curdate()获取当前时间

    Curtime()获取当前时间

    Now()获取当前日期和时间

    Week(date)返回日期date为一年中的第几周

    Year(date)返回日期date的年份

    Hour(time)返回时间time的小时值

    Minute(time)返回时间time的分钟值

    Datediff(date1,date2)返回日期相隔天数

    Adddate(date,n)计算加上n天后的日期

    date_add(date,interval 多长时间例1 year) 多长时间以后的时间

    date_sub(date,interval 多长时间例1 year)多长时间之前的时间

    例:Select year(borndate) from student;

    timestampdiff(返回格式如hour,timestamp1,timestamp2):相差多久

    to_days(now()):到现在多少天

    (4)数学函数

    Ceil(x)返回大于或等与x的最小整数 (向上取整)

    Floor(x)返回小于或等于x的最小整数(向下取整)

    Rand()返回0~1之间的随机数

    例:Select ceil(studentresult)from result;

    (5)流程控制函数

    if(1=0,'真','假');成立输出第二个不成立输出第三个

    ifnull(expr1,expr2):如果为空expr1换位erpr2

    DISTINCT去除重复项

    select distinct 字段 from 表名 [where 条件];

    分组查询:select camp,count(1) '阵营人数' from star group by camp;

    select camp,count(1) '阵营人数' from star group by camp having count(1)>15;

  3. order by子句

    Selet studentID AS 学生编号,(studentResult*0.9+5) AS 综合成绩

    From result

    Where (studentResult*0.9+5)>60

    Order by studentResult(+desc)降序(+asc)升序默认;

  4. LIMIT子句(翻页)

    Selet<字段名列表>

    From <表名或视图>

    Where <查询条件>

    Order by <排序的列名>

    Limit[位移偏移量,]行数];

  5. 子查询

    (1) 简单子查询

    分两步:select....from 表1 where 条件;

    Select....from表1where条件

    一步:Select ... from 表1 where 字段1 比较运算符(子查询);

    模糊查询:between:在什么之间 like:像 (like ‘李%’)in:在什么中

    Is null :操作符为null is not null:操作符不为null

    %:0到任意个字符 含某字(%字%) _: 1个字符(可以写多个_)

    \:转义字符 escape ‘:’:自己定义转义字符

    连接查询:1.内连接:inner join查询两表查询的交集2. 外连接 outer join

    2.1 left join左连接:以左表作为基准右表一一匹配,匹配不上返回左表记录, 右表以null填充

    2.2 right join右连接:以右表作为基准左表一一匹配,匹配不上返回右表记 录,左表以null填充

    3. 自连接、等值非等值连接

    等值连接where 字段(表一)=字段(表二)

    (2)in子查询

    (2) not in子查询

  6. 等值转换:

    select distinct s_name,case when s_sex=1 then '男' else '女' end '性别' from stu;

    select distinct s_name,if(s_sex=1,'男','女') from stu;

  7. 范围转化

    select s_name,s_score,

    case

    when s_score>=90 then '优'

    when s_score>=80 and s_score <90 then '良'

    when s_score>=60 and s_score <80 then '及格' else '不及格'

    end '成绩等级'

    from stu;

  8. 行转列

    select

    s_name '姓名',

    case s_course when '语文' then s_score end'语文',

    case s_course when '数学' then s_score end'数学',

    case s_course when '英语' then s_score end'英语'

    from stu;

    union

    select

    s_name'姓名',

    max(case s_course when '语文' then s_score end)'语文',

    max(case s_course when '数学' then s_score end)'数学',

    max(case s_course when '英语' then s_score end)'英语'

    from stu group by s_name;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sonhhxg_柒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值