学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:自动创建了一个新表