zoukankan      html  css  js  c++  java
  • Sql学习笔记(二)—— 条件查询

    上篇简单介绍了一下sql的一些基础增删改查语句,而针对多种多样的查询语句则未详细说明,这一篇继续记录一下关于各种条件查询的知识。

     

    1.按列名进行查询

    语句:

    1 select stuName , stuAge from student
    2 
    3 -- select 后的字段用','分隔,不能使用 and 

     

    注意:select 后的字段不要用and 连接 这样不对。 

    结果展示为:

     

    2.where 条件查询

    先举一个where 条件的例子:

    查询 stuGender 为0和 majorId 为2的记录:

    1 select * from student 
    2 
    3 where stuGender = 0 
    4 
    5 and majorId = 2 

     

    这里写查询语句的时候可以尝试把语句分开在不同的行写这样想执行哪些行的语句就选择哪些,执行起来很灵活。

    查询结果如下:

     

     通过这个例子想说明一下,where后面的运算符有是多种,不止有 “=”,还有 “<>” ,">=" 等等,具体的如下表所示:

     
    操作符 描述
    = 等于
    <> 不等于(有的也可写为!=)
    > 大于
    < 小于
    >= 大于等于
    <= 小于等于
    between 在某个范围内
    like 搜素某种模式

    前面的6种的使用方法都和上面的示例一致,下面说一下后面两种:

     (1)between 

    between 和 and 搭配起来用,作用和 >= , <=搭配 起来用效果一样,可以看下面这个示例:

    1 -- between 使用
    2 
    3 select * from student 
    4 
    5 where stuAge between 20 and 24

     

     结果如下:

     

     由上可以看到,查询出的是年龄在20 - 24之间的值。

    (2)like

    like 的作用是; 模糊查询,like关键字 和 通配符一起使用:

    通配符:

    %; 替代一个或多个字符或者不替代任何字符:

    示例:查询 地址是 *京的学生:

    1 select * from student 
    2 
    3 where stuAddress like '%京'

     

    查询结果:

     

     但是,当你把字段值写全,再加上 % ,也能正常查询,如下:

    1 select * from student 
    2 
    3 where stuAddress like '%北京%'

    查询结果:

    通配符 _ : 仅替代一个字符:

    示例:

    select * from student
    
    -- where stuAddress like '_京'
    
    where stuAddress like '南_'
    
    --  _在前在后都可以

     

    结果展示:

     

     

    通配符  [  某字符(可不止一个字符) ] :中括号中写的字符,只要某字段值的首位包含其中任意一个字符,则会查询出来,须配合%或者_使用;

    比如:[南北],则会把字段里有南和北其中任意一个字的记录查询出来,示例如下:

     

    1 -- [某某字符]
    2 select * from student 
    3 where stuAddress like '[南武]%'

     

    结果显示如下:

     

     注意要配合 % 使用;

     通配符  [^某某字符 ] : 上一个通配符的取反,意思是不包含某某字符的记录:

    示例:

    1 -- [^某某字符]
    2 select * from student
    3 where stuAddress  like '[^南武]%'

     

     注意:^ 要写在中括号里面;

    结果为:

     

     这里需要注意的是,[]中的字符必须是某字段值的首个字符,常用于搜索姓 什么 的人群。

      另外: like  '[^XXX]%'  也可以实现为   not like  '[XXX]%' ;

     3.and 连接多个where 条件

    and 连接多个 where 条件 ,表示 “与" ,取满足条件的交集;

    示例:

    1 -- and 
    2 select * from student
    3 
    4 where stuAge >= 18 
    5 
    6 and stuGender = 1
    7 
    8 and majorId = 1

     

    where 后面可以接多个 and 

     结果为:

    4. or 连接多个where 条件

    or连接多个 where 条件 ,表示 “或" ,取满足条件的并集;

     示例:

     1 -- or
     2 select * from student
     3 
     4 where (stuName = 'AAA'
     5 
     6 or stuName = 'BBB'
     7 
     8 or stuName = 'FFF')
     9 
    10 and stuGender = 0

     

    结果:

     从代码可以看到,查询条件可以用 () 括起来,定义优先级,这种写法,和不带()的结果是不一样的。

    不带括号示例:

    1 select * from student
    2 
    3 where stuName = 'AAA'
    4 
    5 or stuName = 'BBB'
    6 
    7 or stuName = 'FFF'
    8 
    9 and stuGender = 0

    结果:

     

     5.in 操作符

    in 操作符会指定查询的范围,比如你希望查询id为 4,7,12的记录,那么你就可以使用in,示例语句如下:

    查询id为2,4,7的记录:

    1 -- in 指定查询范围
    2 
    3 select * from student where student.id in (2,4,7)

     结果展示为:

     6.not 表示对某个条件去取反

    比如:前面讲到的 like 的否定就写为 not like ;

    示例如下:

    取出地址中不含 '京'字的记录: 

    1 -- not --
    2 select * from student where student.stuAddress not like '%京%'

    结果显示为:

     7.数据排序  order by

    (1)默认排序方法:order by 字段名

    示例:按年龄排序 

    1 -- order by -==
    2 select * from student order by student.stuAge
    3 -- 若不指定升序还是降序,则默认是升序排列

    注意:在不指定升降序的时候,默认是升序(从小到大往下排)

    结果展示为:

    (2)升序排列 ASC

     用法为:order by 字段名  asc

    示例:

    -- order by -==
    select * from student order by student.stuAge  asc
    -- 若不指定升序还是降序,则默认是升序排列

    结果和(1)中显示一样;

    (3)降序排列 

      用法为:order by 字段名  desc

     示例:

    按照id降序显示

    1 -- 降序--
    2 select * from student order by student.id desc

    结果为:

    (4)设定排序优先级,指定多个排序规则

    这个是啥意思呢,意思是这样的,比如你这个表(student)中有很多数据,现在你想按照年龄降序排列,来看一下结果:

     上图中你可以看到,年龄按照降序排列,但有许多的年龄值是重复的,这个时候那些年龄一样大的数据,你该怎么排序呢?如果你想指定这个第二优先级的顺序,第三优先级的顺序,也有办法做到,看下面:

    第一按年龄降序排序、其次按majorId降序排序,最后按id升序排列:

    1 -- 多种排序方法 --
    2 select * from student order by student.stuAge desc,student.majorId desc,student.id asc

    结果显示为:

     8.数据库别名

      在写sql语句时,有时候表名和字段名很长,书写起来较麻烦,这个时候我们可以给表名或者字段名起个绰号——也就是别名。

    写法有以下几种:

    (1)Alias(也就是AS)

    sql server写法:

    为列指定别名:本名 as '别名';(注意:引号可加可不加,但我觉得加上比较好,

    为表指定别名:本名 as 别名;(一定不能加引号

    示例如下:

    select stuName as ‘name’,stuAge as ‘age’ from student as s

    where s.majorId = 1

    结果如下:

    (2)省略 as 的写法

    这种写法和上一种一摸一样,唯一区别就是 不写 as:

    示例:

    -- 省略 as --
    select stuName  name,stuAge  age from student  s
    
    where s.majorId = 1

    结果:

    (3)别名的妙用

     可以给几个字段设置一个共同的别名,这样这些数据会组成一个新的字段,字段名就是指定的别名:

    示例:把student表中的年龄、性别、地址 结合在一起,组成一个名字为 info的字段:

    1 -- 多个字段一个别名
    2 select stuName, CONCAT(stuAge,',',stuGender,',',stuAddress) as info  from student as s

    结果为:

     8. case 语句

     case 语句我的理解,其实就是在sql语句里对查询的值做出了判断,并进行分类。比如,你在性别表里用0表示男,1表示女,此时,你可以在程序里进行转换,也可以直接在sql里即对其进行转换,在sql中就要用到 case语句了,case语句的用法如下:

    简单case函数

    case  字段名 

    when 判断条件一 then 结果一
    when 条件二 then 结果二
    
    when 条件三 then 结果三
    .
    .
    .
    when 条件n  then 结果n
    else 结果n+1  

    end

     case 搜索函数:

    语法如下:

    case  -- case起始
    
    when 条件一 then 结果一
    
    when 条件二 then 结果二
    
    when 条件三 then 结果三
    .
    .
    .
    when 条件n  then 结果n
    
    else 结果 n+1
    
    end  -- end 结束

     下面给出几个示例:

    (1)查询学生性别,并分为男和女进行展示:

     select stuName ,
    case stuGender

    when '0' then ''

    when '1' then ''

    else '其他'

    end as '性别'
    from student

    查询结果:

    (2)年龄大于20为前辈,小于等于20为后辈

     1 select student.stuName ,
     2  
     3 case 
     4 
     5 when student.stuAge > 20 then '前辈' 
     6 
     7 when  student.stuAge <= 20 and student.stuAge >= 19 then '后辈' 
     8 
     9 else '菜鸟'
    10 
    11 end  as '资历'
    12 
    13 from student

    结果:

     啊,写了好久啊,这一篇,上周各种事情,最后还是写完了,哈哈。

    下一篇写一下联表查询,本篇先告一段落了哦。

    我的QQ邮箱:3074596466@qq.com 

     

    声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。对于本博客如有任何问题,可发邮件与我沟通,我的QQ邮箱是:3074596466@qq.com
  • 相关阅读:
    杂想
    杂题操作
    codeforces 11D(状压dp)
    2019 计蒜之道 复赛 “星云系统” (单调栈)
    SPOJ VLATTICE (莫比乌斯反演)
    2019 ICPC 陕西西安邀请赛 D. Miku and Generals
    buerdepepeqi 的模版
    HDU 2588 GCD
    二项式反演
    2014ACM/ICPC亚洲区西安站 F题 color (组合数学,容斥原理)
  • 原文地址:https://www.cnblogs.com/CherishTheYouth/p/CherishTheYouth_917.html
Copyright © 2011-2022 走看看