目前最全的常用SQL语句示例(急用速查)!

来源:互联网 发布:淘宝货到付款拒收 编辑:程序博客网 时间:2024/05/22 12:04

目前最全的常用SQL语句示例(急用速查).
  SQL语句大概有4,5年不太用了,最近换了个新公司,项目中又用到了SQL语句,赶忙突击温习了一下,汇编成册,以备以后临时查询。

Ⅰ示例使用库,表。
create table Student(sNo char(9) not null primary key, sName char(8), Sex char(2), Age tinyint, Department char(10),ClassName char(10),RuXueTime datetime);  --创建学生表
create table Course(sCourseNo char(4) not null primary key, sCourseName char(12), sFirstCourse char(4));  --创建课程表
create table Grade(sNo char(9),sCourseNo char(4) not null ,Score tinyint);  --创建成绩表
create table CourseSheet(TeacherName char(8),sCourseNo char(4) not null ,StudyHour tinyint,ClassName char(10) not null );  --创建授课表

--插入Student表记录
insert into student(sNo,sName,Sex,Age,Department,ClassName,RuXueTime) values('200009001','葛文卿','女',22,'国际贸易','国贸2班','08-29-2000');  --插入一条记录
insert into student(sNo,sName,Sex,Age,Department,ClassName,RuXueTime) values('200104019','郑秀莉','女',21,'会计学','会计1班','09-2-2001');  --插入一条记录
insert into student(sNo,sName,Sex,Age,Department,ClassName,RuXueTime) values('200203001','刘成锴','男',18,'计算机','软件2班','08-27-2002');  --插入一条记录
insert into student(sNo,sName,Sex,Age,Department,ClassName,RuXueTime) values('200206001','李涛','男',19,'电子学','电子1班','08-25-2002');  --插入一条记录
insert into student(sNo,sName,Sex,Age,Department,ClassName,RuXueTime) values('200203002','沈香娜','女',18,'计算机','软件2班','05-13-2001');  --插入一条记录
insert into student(sNo,sName,Sex,Age,Department,ClassName,RuXueTime) values('200206002','李涛','男',19,'电子学','电子1班','08-25-2002');  --插入一条记录
insert into student(sNo,sName,Sex,Age,Department,ClassName,RuXueTime) values('200203003','肖一竹','女',19,'计算机','软件2班','03-22-2000');  --插入一条记录

--插入course表记录
insert into course(sCourseNo,sCourseName,sFirstCourse) values('C801','高等数学',NULL);
insert into course(sCourseNo,sCourseName,sFirstCourse) values('C802','C++语言','C807');
insert into course(sCourseNo,sCourseName,sFirstCourse) values('C803','数据结构','C802');
insert into course(sCourseNo,sCourseName,sFirstCourse) values('C804','数据库原理','C803');
insert into course(sCourseNo,sCourseName,sFirstCourse) values('C805','操作系统','C807');
insert into course(sCourseNo,sCourseName,sFirstCourse) values('C806','编译原理','C803');
insert into course(sCourseNo,sCourseName,sFirstCourse) values('C807','离散数学',NULL);

--插入Grade表记录
insert into Grade(sNo,sCourseNo,Score) values('200203001','C801',98);
insert into Grade(sNo,sCourseNo,Score) values('200203002','C804',70);
insert into Grade(sNo,sCourseNo,Score) values('200206001','C801',85);
insert into Grade(sNo,sCourseNo,Score) values('200203001','C802',99);
insert into Grade(sNo,sCourseNo,Score) values('200206002','C803',82);

--插入CourseSheet表记录
insert into CourseSheet(TeacherName,sCourseNo,StudyHour,ClassName) values('苏亚步','C801',72,'软件2班');
insert into CourseSheet(TeacherName,sCourseNo,StudyHour,ClassName) values('王立山','C802',64,'软件2班');
insert into CourseSheet(TeacherName,sCourseNo,StudyHour,ClassName) values('何珊','C803',72,'软件2班');
insert into CourseSheet(TeacherName,sCourseNo,StudyHour,ClassName) values('王立山','C804',64,'软件2班');
insert into CourseSheet(TeacherName,sCourseNo,StudyHour,ClassName) values('苏亚步','C801',72,'电子1班');


Ⅱ 操纵语言(INSERT、UPDATE、DELETE).sql
--3种不同的insert
insert into student(sNo,sName,Sex,Age,Department,ClassName,RuXueTime) values('200009001','葛文卿','女',22,'国际贸易','国贸2班','08-29-2000');  --插入Student表记录
insert into student values('200009001','葛文卿','女',22,'国际贸易','国贸2班','08-29-2000');  --插入Student表记录
insert into student(sNo,sName,RuXueTime) values('200104019','郑秀莉','09-2-2001');  --插入一条记录

update student set Sex='男',RuXueTime='08-13-2001' where sname='葛文卿'; --修改Student表中的一条记录
update Course set sFirstCourse=NULL where sCourseNo='C807';


--2种不同的delete
delete from student where sname='葛文卿';  --删除student中的一条记录
delete from student ;  --清空student表中的全部记录


Ⅲ 查询语言(SELECT).sql
--SQL语言中最灵活、最强大、最主要、最核心的部分就是它的查询功能(SELECT语句)

◆基于单表查询
--1.查询指定的字段
select sNo,sName,RuXueTime from student;

--2.通配符"*"的使用
select * from student;

--3.基于字段的表达式
select sno,sname,2002-age as  "出生年月" from student;
或者:
select sno,sname,2002-age "出生年月" from student;

--4.使用[DISTINCT]短语去掉重复的记录
select distinct sName from student;
select distinct sNo from Grade where Score>=80;

--5.用[WHERE]子句过滤记录
A.关系运算符----[=,<,<=,>,>=,!=或<>]
select * from student where RuXueTime<'2001-12-31';
select * from student where Department='计算机';
select * from student where ClassName<>'软件2班';

B.逻辑运算符----[OR,AND,NOT]
select * from student where ClassName='软件2班' and Sex='女';  --AND
select * from student where Age<19 OR Sex='女';   --OR

select * from student where NOT Age=19;  --NOT
或者:
select * from student where Age!=19;  --作用同NOT
select * from student where Age<>19;  --作用同NOT


C.特殊运算符----[%,_,BETWEEN,IS NULL,LIKE,IN,EXISTS]
select * from CourseSheet where TeacherName LIKE '苏%';  --LIKE %
select DISTINCT ClassName from student where ClassName NOT LIKE '软件2班';  --NOT LIKE
select DISTINCT TeacherName from CourseSheet where TeacherName LIKE '苏_步';  --LIKE _
select sCourseName from Course where sFirstCourse IS NULL;  --IS NULL
select * from student where sName LIKE '_成%';  --LIKE _ %

select * from student where Age BETWEEN 18 AND 20;   --BETWEEN
select * from student where Age NOT BETWEEN 18 AND 20;  --NOT BETWEEN
select * from student where RuXueTime BETWEEN '2000-1-1' AND '2002-12-31' order by RuXueTime;   --BETWEEN

select sFirstCourse from Course  where exists(SELECT NULL) ;  --exists

select * from student where department in ('计算机','国际贸易');  --IN
select * from student where Age in (18,22);  --IN

--6.使用[ORDER BY]子句对查询结果排序
select * from student order by Age; --按Age排序(升序)
或者:
select * from student order by Age asc; --按Age排序(升序)

select * from student order by Age desc; --按Age排序(降序)

select * from student order by Age asc,RuXueTime asc; --按Age排序(升序)
select * from student where RuXueTime<'2002-06-30' order by Age asc,RuXueTime asc; --按Age排序(升序)

--7.集合函数
A.[COUNT]函数的应用
select COUNT(distinct TeacherName) from CourseSheet;
select COUNT(distinct TeacherName) as '教师人数' from CourseSheet;
select COUNT(*) from Student where Sex='女' and Age=19;
select COUNT(distinct sNo)  from Grade;

B.[MAX]和[Min]函数的应用
select Max(Age) as '最大年龄',Min(Age) as '最小年龄' from student;
select Max(score) as '最高成绩' from Grade where sCourseNo='C801';
select Min(score) as '最低成绩' from Grade where sCourseNo='C801';

C.[AVG]函数的应用
select avg(Age) as '平均年龄' from student;

D.[SUM]函数的应用
select SUM(Age) as '年龄总和' from student;
select SUM(Age+1) as '年龄总和' from student;
select SUM(Age) as '女生年龄总和' from student where Sex='女';


--8.使用[GROUP BY]对查询结果进行分组
select RuXueTime as '入学年份',COUNT(*) FROM student group by RuXueTime;
select Sex,Count(Age),avg(Age) from student group by sex; --统计男女生各自的人数和平均年龄
select sCourseNo as '课程号',Count(sCourseNo) as '人数' from Grade group by sCourseNo;  --列出各个课程号以及相应的选修人数

--9.利用[HAVING]筛选结果表
select sNo,COUNT(*) from Grade group by sno having count(*)>1;
select sNo as '学号',COUNT(*) as '选修门数' from Grade group by sno having count(*)>1;

◆基于多表查询
A.自然连接
select student.*,Grade.* from student,Grade where student.sno=Grade.sno;
select student.sno,sname,sex,age,department,className,sCourseNo,Score from student,Grade where student.sno=Grade.sno;

B.自身连接
--列出每一课程的间接先修课(即先修课的先修课)
select F.sCourseNo as '课程号',S.sFirstCourse as '间接先修课' from course F,course S where F.sFirstCourse=S.sCourseNo;

C.复合条件连接
--列出所有学生的学习成绩(要求:输出姓名,课程名称,课程号,成绩,授课教师和该课程的学时数)
select A.sName, D.sCourseName, B.sCourseNo, B.score, C.TeacherName, C.StudyHour  from student A, Grade B, CourseSheet C, Course D where (A.sNo=B.sNo) and (A.ClassName=C.ClassName) and (B.sCourseNo=C.sCourseNo) and (C.sCourseNo=D.sCourseNo);

--列出选修了"C801"课程并且成绩在90分以上的所有学生清单。
select student.sNo,sName,Sex,Age,Department,ClassName from student,Grade where student.sNo=Grade.sNo and sCourseNo='C801' and score>90;

◆基于嵌套的查询
--查询"沈香娜"所在班级所有学生的名单
select sNo,sName,Sex,Age,Department,ClassName from student where ClassName =(select ClassName from student where sName='沈香娜');

A.带有[IN]的子查询
--查询'刘成锴'所在系的所有女生名单
select sNo,sName,Sex,Age,Department,ClassName from student where Department in (select department from student where sName='刘成锴') and Sex='女';

--列出选修了'高等数学'的学生学号、姓名和所在院系。(从课程表中取得'高等数学'的课程号,然后根所查到的高等数学课程号,从成绩表中查找满足条件的学号列表(2个),然后根据查到学号列表(2个)在学生表中找到满足条件的学生信息(2个).)
select sNo,sName,Department from student where sNo in (select sNo from Grade where sCourseNo in (select sCourseNo from Course where sCourseName ='高等数学'));
或者:
select student.sNo,sName,Department from student,Grade,Course where student.sNo=Grade.sNo and Grade.sCourseNo=Course.sCourseNo and Course.sCourseName ='高等数学';

--列出学习课程号为"C801"或"C804"的学生学号、姓名、所在院系、课程名称和成绩。
--本例主要学习有关特殊运算符[IN]和自然连接的表达式书写格式。
select student.sNO,sName,Department,sCourseName,score from student,grade,Course where student.sNo=Grade.sNo and grade.sCourseNo=Course.sCourseNo and Course.sCourseNo in ('C801','C804');


Ⅳ 定义语言(CREATE、ALTER、DROP).sql
--对DataBase库操作
drop database XueJiDataBase;  --删除学籍数据库(XueJiDataBase)
create database XueJiDataBase;  --创建学籍数据库(XueJiDataBase)
alter database XueJiDataBase modify file(Name='XueJiDataBase',maxsize=unlimited );

--对Table表操作
create table Student(sNo char(9) not null primary key, sName char(8), Sex char(2), Age tinyint, Department char(10),ClassName char(10),RuXueTime datetime);  --创建学生表
alter table Student alter column sName char(10);  --修改Student表sName列
drop table Student;  --从XueJiDataBase数据库中删除Student表

原创粉丝点击