SQL总结笔记(一)

 学sql老长时间了,不过最近一直在用mysql,虽然都差不多,但在这里还是要总结一下,对以后可能有帮助

废话也不多说了,sql主要的是查询

 

查询产生一个虚拟表,看到的是表形式显示的结果,但结果并不真正存储,每次执行查询只是现从数据表中提取数据,并按照表的形式显示出来
SELECT 语句的基本语法格式

SELECT    <列名> 
FROM      <表名> 
[WHERE    <查询条件表达式>] 
[ORDER BY <排序的列名>[ASC或DESC]]

 

选择表中的若干列

二、查询表中部分列
1、格式
      select   列名1,列名2,列名3,……
      from   表名
2、例:查询学生的姓名和出生日期
      select  stuName,stuBirthday
      form  studentInfo  

 

消除重复行查询

1、格式
      select  distinct 列名  from  表名
2、例:查询选修了课程的学生的学号
      select  distinct  stuID  from  selectInfo 

 

 为结果集内的列指定别名

1、格式
     select   表达式    as   别名   from  表名
2、例:查询学生表中学生的姓名及年龄
   select   姓名, year(getdate())-year(stuBirthday)  as stuAge 
   from  studentInfo

 

 限制返回行数

1、格式
      select  top n  *  from  表名
 或  select  top  n  percent  from  表名
      top n:前n行记录
      top  n  percent:前n%行记录
2、例:查询成绩表中前3行记录
      select  top  3  *   from   scroeInfo

 

查询满足条件的记录

1、格式
     select  *  from  表名   where  查询条件
2、例:查询成绩表中C语言成绩大于60分的记录
     select  *  from  score   
      where  stuscore>=60

 

常用的查询条件

查询条件	运算符	意义
比较	>,>=,<,<=,=,!=(<>),!>,!<;not+上述运算符	比较大小
确定范围	Between and,
Not between and	判断值是否在范围内
确定集合	In ,not in	判断是否是列表中的值

 

查询条件	运算符	意义
字符匹配	Like,not like	判断值是否与指定的字符通配格式相符
空值	Is null,not  is null	 判断值是否为空
多重条件	And,or,not	用于多重条件选择

 

SQL中的通配符

 

(1)%:百分号,代表任意长度的字符串(长度可以是0)的字符串。
   例如:a%b表示以a开头,以b结尾的任意长度的字符串。
      acb      adkdkb     ab

查询学生表中姓“刘”的同学的信息
   select  *  from  studentinfo   where 
   stuName  like  ‘刘%’
查询学生表中手机号前三位是138,最后两位是66的同学信息
   select  *  from  studentinfo   where
   stuTel  like  ‘138%66’

 

(2)_:下划线,代表任意单个字符。
    例如:a_b表示以a开头,以b结尾的长度为3的任意字符串。
   acb         akjdfb        ab
(3)[  ]:表示方括号里列出的任意一个字符。
 例如:A[BCDE],表示第一个字符是A,第二各
字符为B,C,D,E中的任意一个;也可以是字
符范围,如A[B-E]与A[BCDE]等价
(4)[^   ]:表示不在方括号里的列出的任意一个字
符,与[  ] 互为反运算

 

 

涉及空值的查询

1、格式
     列表达式   IS [NOT] NULL
2、例:查询学生表中成绩为空的学生信息
      select  *  from  studentInfo
       where    stuScore  is  null
注:①null与0和空格不同
       ②is不能用“=”代替

 

多重条件查询

1、格式
    [NOT]  逻辑表达式  AND| OR  [NOT]  逻辑表达式 
2、例:查询学生表中宿舍号为‘504’,成绩在80到100之间的同学的学号和姓名
   select  stuID,stuName  from  studentInfo
  where stuDorm=‘504’ and stuScore>=80  and
    stuScore<=100

 

对查询结果进行排序

1、格式
   ORDER BY  列名  [ASC|DESC]
 功能:查询结果按指定列进行升序(ASC)或
降序(DESC)排列
2、例:查询宿舍号是504的同学的信息,成绩按降序排列
select * from studentInfo
  where stuDorm=‘504’  order by  stuScore  desc

 

3、可以进行多列排序,先按前面的列进行排序,如果值相同再按后面的列排序
格式:ORDER BY 列名1 [ASC|DESC] ,
           列名2 [ASC|DESC] 
例:查询全体学生的信息,查询结果先对宿舍
号进行升序,再对成绩进行降序排列
 select  *  from  studentInfo
order by stuDorm asc,stuScore desc

 

使用聚合函数

1、COUNT([DISTINCT|ALL]*)
   功能:统计记录的个数
   说明:DISTINCT是去掉指定列中的重复值的意思,ALL是不取消重复,默认是ALL
  例:查询学生表中学生总数
   select count(*) as 学生总数  from studentinfo
使用聚合函数
3、SUM([DISTINCT|ALL]<列名>)
      AVG([DISTINCT|ALL]<列名>)
      MAX([DISTINCT|ALL]<列名>)
      MIN([DISTINCT|ALL]<列名>)
功能:分别计算一列值的总和(SUM)、平均值(AVG)、最大值(MAX)、最小值(MIN)
注意:①使用SUM和AVG时,计算列必须是数值型
           ②使用聚合函数返回单行的值,如果要统计多行的值,根据业务需求使用 group by 子句

 对结果进行分组统计

二、对结果进行分组统计
1、格式
 GROUP BY  列名  [HAVING  筛选条件表达式]
2、说明
(1)“BY 列名”是指按指定的列进行分组统计
(2)通常是对其中一列进行分组,对另一列进
          行统计

 

3、注意事项
(1)select 子句中的列名必须包含在聚合函数中或group by 子句中
(2)having与where子句的区别在于作用对象不同。having作用于组,选择满足条件的组,where子句作用于表,选择满足条件的记录
(3)where 子句不可以使用聚合函数,having子句可以使用聚合函数
(4)分组统计每个组只有一个汇总行,只显示统计信息

 

小例子

 

select empID,avg(empSalary)
from salaryinfo
where empsalary>=4000
group by empID
having avg(empSalary)>5800

 

用查询结果生成新表

1、格式
    select  <列表达式>  into  新表名
    from  源表名
    where  查询条件
2、说明:
 (1)新表名是被创建的新表,查询的结果将添加到此表中
 (2)新表中的字段由结果集中的字段列表决定
例:查询选课表中成绩在60分以上的信息,并保存在表passInfo中
      select *  into  passInfo
      from  selectInfo
      where stuScore>=60     

 使用select 语句向表中插入数据

语法结构
insert [into]  表名1(列名列表)
select   列名列表 from   表名2  
where  查询条件
注:①insert表和select表的结果集的列数、列
序数据类型必须一致
       ②insert [into]  select:所插入的表必须存在
           select  into:自动创建了一个新表

你可能感兴趣的:(数据结构,sql,mysql,D语言)