SQL语句 |
您所在的位置:网站首页 › 投影的sql语句怎么写 › SQL语句 |
目录 定义表 删除表 修改表 1.修改列 2.添加列 3.删除列 插入数据 单张表操作(三种方法插入数据(11对应)) 多张表操作(从一张表A1插入数据到另一张表A2) 更新数据 删除数据 查询 SQL基本查询语句 1.查询语句的基本结构 2.投影 3.选择 4.排序 聚集查询 1.聚集函数 2.使用 group by 分组 3.使用having 子句筛选结果集 连接查询 1.内连接查询(多张表连接) 定义表语法格式: create table 学生表{ 学号 int, 姓名 char(8), 性别 char(1), 班级 char(10), 年龄 int(2) } 删除表语法格式: drop table 表名 修改表 1.修改列alter table 表名 alter column 列名 新数据类型 //例:将语句中的教师列的类型改为char(6) alter table 选课表 alter column 教师 char(6) 2.添加列alter table 表名 add 新列名 数据类型 //例:选课表添加“课程类别”列,类型字符串,长度4 alter table 选课表 add 课程类别 char(4) 3.删除列alter table 表名 drop column 列名 //例:删除课程表中的备注列 alter table 选课表 drop column 备注 插入数据insert into 表名 (列名列表) values (值列表) 单张表操作(三种方法插入数据(11对应)) //例:要求学生表中插入一行数据:学号为9999,姓名张三,性别男,其他情况未知 insert into 学生表(学号,姓名,性别) values ('9999','张三','m') insert into 学生表 values('9999','张三','m','null','null') insert into 学生表 values('9999','张三','m',default,default) 多张表操作(从一张表A1插入数据到另一张表A2) //例:假设有一张和学生表定义完全一样的表,表名为'学生表1',要求在其中插入学生表中所有男生的信息 insert into 学生表1(学号,姓名,性别,班级,年龄) select 学号,姓名,性别,班级,年龄 from 学生表 where 性别='m' 更新数据update 表名 set 列名 = 表达式 [ , ... , n ] [ where 更新条件 ] //例1:要求所有学生的年龄加1 update 学生表 年龄 = 年龄+1 //例2:修改软件工程这门课的信息 要求将“软件工程”的周课时数改为8课时,并把备注改为“核心课程” update 课程表 set 周课时数=8,备注='核心课程' from 课程表 where 课程名='软件工程' //例3:用子查询实现数据更新 要求将学号“11111”的学生的年龄改为与学号为“22222”的学生的年龄一样 update 学生表 set 年龄=(select 年龄 from 学生表 where 学号='22222') where 学号='11111' //例4:用子查表连接实现数据更新(更新条件基于另一张表) 要求将GZ02计6全班学生的成绩都加上10分 1. update 选课表 set 成绩=成绩+10 where 学号 in (select 学号 from 学生表 where 班级='GZ02计6') 2. update 选课表 set 成绩=成绩+10 from 选课表 join 学生表 on 学生表.学号=选课表.学号 where 班级='GZ02计6' 删除数据delete from 表名 where 删除条件 //例1:要求删除所有学生的选课记录 delete from 选课表 //删除表中全部数据,但保留表结构 //例2:要求删除GZ02房产的全部学生 delete from 学生表 where 班级='GZ02房产' //例3:删除GZ02计6班不及格学生的选课记录 delete from 选课表 where 成绩= 例1:要求检索出选课表中所有成绩在95分以上的同学的学号、课程号、成绩 select * from 选课表 where 成绩>95 例2:要求检索出班级为GZ02计6班的全部学生的信息 select * from 学生表 where 班级='2108财会'2.逻辑运算符 and 、not 、or 例:选修了1号课程并且成绩在80分以上的同学的学号和成绩 select 学号,课程号,成绩 from 选课 where 课程号='1' and 成绩>803.between....and 例:学生表中年龄在20-23之间的所有男同学的信息 select * from 学生表 where 年龄 between 20 and 23 and 性别='M'4.in ( not in )意思是包含在表中有/没有 in 指定的列 要求学生表中有a5、a6、a7三个班级的同学信息 使用in 例:select * from 学生表 where 班级 in ('GZ02计5','GZ02计6','GZ02计7') 没有用in 例:select *from 学生表 where 班级='GZ02计5' or 班级='GZ02计6' or 班级='GZ02计7'5.字符串模糊匹配 like关键字 列名 [not] like 匹配字符串 6.涉及空值的查询 空值具有以下特性: 等价于没有任何值 与0、空字符串、空格不同 排序在其他数据前面 在计算过程中和大多数函数中均可以使用空值 判断某个值是否为空值的语句格式: 列名 is [not] null 例:要求查询已经有课,但无考试成绩的学生的学号和相应的课程号 select 学号,课程号 from 选课表 where 成绩 is null 例:查询所有有考试成绩的学生的学号和课程号 select 学号,课程号 from 选课表 where 成绩 is not null 4.排序order by 排列查询结果的顺序: asc 升序 desc 降序 例:选课表中所有选修课课程号为1,并且成绩在95分以上的同学的学号和成绩, 并要求按成绩从高到低排序 select 学号,成绩 from 选课表 where 课程号=1 and 成绩>=95 order by 成绩 desc 例:按成绩降序,如果成绩相同,再要求按学号进行升序排列 select 学号,成绩 from 选课表 where 课程号=1 and 成绩>=95 order by 成绩 desc,学号 聚集查询 1.聚集函数avg 平均值 count(*) 数据值的数量 count 选择行的数量 max 最大值 min 最小值 sum 表达式中所有值 注意:这些聚集函数必须用在select子句中,其返回的结果在查询结果中作为新列出现 max、min、avg 函数的使用 例:要求通过选课表查询出所有选修1号课程的学生的最高分、最低分、平均分 select max(成绩) as 最高分, min(成绩) as 最低分, avg(成绩) as 平均分 , from 选课表 where 课程号=1 count 函数的使用 例: select count(*) as 所有记录数, count(学号) as 所有学生数, count(班级) as 班级列数量, count(distinct 班级) as 班级数 ----不重复 from 学生表 2.使用 group by 分组 例1:按班级汇总人数和平均年龄 select 班级, avg(年龄) as 平均年龄, count(学号) as 班级人数, from 学生表 group by 班级 例2:对a6班的同学按性别计算平均年龄 select 性别,avg(年龄) as 平均年龄 from 学生表 where 班级='GZ02计6' group by 性别 3.使用having 子句筛选结果集having 子句是为 group by 设置条件的方式,与where子句在select 语句设置条件的方式一样 使用having 子句时,需注意: having 子句只在group by 子句中使用 在having语句中可以引用任何允许出现在select选择列表中的字段 例:在已经给出了按班级汇总人数和平均年龄的实例,在此基础上, 筛选出平均年龄在19-20岁且班级人数在40人以上的班级 select 班级, count(*) as 班级人数, avg(年龄) as 平均年龄 from 学生表 group by 班级,平均年龄 having avg(年龄) between 19 and 20 and count(*)>40 连接查询 1.内连接查询(多张表连接)如果两个表的相关字段满足连接条件,则从这两个表中提取数据并组合成新的记录 语法格式(2种): from 表1 inner join 表2 on 表1.字段1=表2.字段1 from 表1 , 表2 where 表1.字段1=表2.字段1 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |