SQL数据查询——select

SQL数据查询——select
-----------------------------------------------------------------------------  
字符串表达式的通配符        -- 只能在使用like关键字的where子句中使用通配符)  
    %    --表示任意字符
    _    --表示单个任意字符
    []    --按中括号内字符匹配
    [^]    --非中括号内^后的字符
例子:
'% find this %'        '[a-za-z]%'        '[^f-m]%'
    另外like子句要表示 []_%^ 这些字符中,标准SQL语句时,使用escape关键字定义转义字符,如下
    查询student表中,name为以_开头的记录
    select * from student where name like '\_%' escape '\' --标准SQL中
    select * from student where name like '\_%'    --MySQL中可用 \ 作转义字符
 
一些常用的
    between ... and ...
    in( .., ..., ...... )
    any, all  
    not, and, or    --逻辑运算
    like            --用于字符串匹配,支持通配符
    distinct|[all]    --指定检索独有的列值无重复,all保留重复行
 
-----------------------------------------------------------------------------  
SELECT select_list[ INTO new_table ]  
    FROM table_source [ WHERE search_condition ]  
    [ GROUP BY group_by_expression ]                 --分组
    [ HAVING search_condition ]  
    [ ORDER BY order_expression [ ASC | DESC ] ]    --排序,可加列名,列号
 
例1:对学生成绩的查询。
    select s.sname,sc.grade from s,sc where s.sno=sc.sno
例2:查询结果只显示前n条记录*
    select top 3 sno,sname,sdept from s
例3:分组查询、并改名,若改的名中有单引号,则用双引号括起来
    select sage as '学生年龄',count(*)as '学生数'
    from s group by sage
例4:
    select teacher_id + 5 from teacher
    select * from teacher where teacher+id > 4
    select concat(t.name, 'xx') from teacher t
    select distinct name, tid from student  --去掉重复项
例5:使用CASE函数分类查询
select * ,
     case cno
        when 1 then round((grade*1.03),-1)
        when 2 then round((grade*1.04),-1)  
        when 3 then round((grade*1.05),-1)
        else round((grade*1.01),-1)
     end as 期望成绩
from sc
例6:使用LIKE运算符
    select * from 学生 where 姓名 like '%李%'
例7:使用BETWEEN运算符
    select * from 学生 where 入学成绩 between 550 and 580
例8:对查询结果分组
在'学生'表中按性别统计所有学生的最高成绩。
    select case 性别
          when 0 then '女'
          else '男'
          end as 性别,  
          max(入学成绩) as 最高成绩
    FROM 学生
    group by 性别  
注意:在使用GROUP BY子句时,select子句中每一个非聚合表达式内的所有列都应包含在GROUP BY列表中。否则将会返回错误信息。
 
SQL92标准的连接查询的外连接
    使用*或+表示外连接
    select * form t1, t2 where t1.id =* t2.id -- 右外连接  
SQL99标准的连接查询
    cross join  交叉连接(广义笛卡尔积)
    natural join    自然连接(以同名列为准,无同名列则成广义笛卡尔积)
    join中使用using指定同名列
    join中用on指定连接条件
    左右全外连接分别使用left join,right join, full join
例子:
    select s.*, t.name from student s cross join teacher t;
    select s.*, t.name from student s natural join teacher t;
    select s.*, t.name from student s join teacher t using(t.id);
    select s.*, t.name from student s join teacher t on s.tid=t.id;
    select s.*, t.name from student s right join teacher t on s.tid  
子查询例子:
    select * from st where sname = (select sname from st where sid = 4)  
    -- ------- 除非能确保内层select只返回一个行的值,  
    -- ------- 否则应在外层where子句中用一个in限定符

你可能感兴趣的:(SQL)