1,SQL语言基础-定义语句
2,SQL语言基础-单表查询1
1、 实验目的
(1)掌握Select查询语句基本语法
(2)掌握单表查询中表达式、运算符的用法
(3)熟悉部分函数
(4)熟悉like查询方法
2、 实验预习与准备
SQL 查询语句复习,查询数据库为实验1中的“超市”数据库
3、 实验内容及步骤(对超市数据库的三张表进行简单查询)
use 超市
select * from 营业员
```sql
--(1)查询全体营业员的姓名
```sql
select 姓名 from dbo.营业员
–(2)查询全体营业员的工号、姓名及其工作年月
select 工号,姓名,工作年月 from 营业员 --不同的列名要用逗号隔开
–(3)查询销售表中存在的所有销售员的工号,且去除重复的记录。
select distinct 工号 from 销售 --注意distinct的位置
–(4)查询销售表中商品代码列为T002的记录
select * from 销售
where 商品代码= 'T002'
–(5)查询出生年月大于年的营业员的姓名和出生年月
select 姓名,出生年月 from 营业员
where LEFT(出生年月,4)>'1972'
–(6)查询年龄不大于岁的营业员的姓名、工号、出生年月,假设当前年为年。
select 姓名,工号,出生年月 from 营业员
where 2009-LEFT(出生年月,4)!>38 --!> 不大于
–(7)查询销售表中,销售数量小于或商品代码为T003的记录
select * from 销售
where 销售数量<15 or 商品代码='T003'
–(8)查询商品表中,商品代码非T001的记录。
select * from 商品
--where 商品代码!='T001'
where not 商品代码='T001'
–(9)查询销售表中,所有T003和T002商品并且销售数量不高于的销售记录
select * from 销售
where 商品代码 in ('T001','T003') and 销售数量!>15
–(10)查询在1970到1973年出生的营业员的姓名,出生年月和联系电话
select 姓名,出生年月,联系电话 from 营业员
where left(出生年月,4) between 1970 and 1973
–(11)查询工号为、和的销售员的销售记录
select * from 销售
where 工号 in ('001','003','004')
–(12)查询商品名称中含有“彩电”字符串的所有商品记录
select * from 商品
where 商品名称 like '%彩电%' --前后都有%
–(13)在营业员表中,查询所有姓张的营业员的姓名、工号
select 姓名,工号 from 营业员
--where 姓名like '张_____'
where 姓名 like '张%'
–(14)在营业员表中,查询所有不姓张的营业员的记录,即姓名中不能以“张”字符开头。
select * from 营业员
where 姓名 not like '张%'
–(15)在营业员表中,查询姓“张”且全名为2个汉字的营业员的记录
select * from 营业员
where 姓名 like '张_ ' --姓名是char(6),所以后面需要打四个空格填补位数
–(16)在营业员表中,查询姓名中第2个字为“文”的营业员的记录
select * from 营业员
where 姓名 like '_文%'
3,SQL语言基础-分组查询
–1) 找出全体男生的总人数
–查询表截屏:
USE ST
GO
SELECT COUNT(*) FROM S
WHERE Ssex = '男'
–2) 找出选修了课程的学生总人数
–查询表截屏:
SELECT COUNT(distinct Sno) FROM SC --表中有重复值,要对Sno去重复,distinct
–3) 查找出7号课程的最高分、最低分和平均分
–查询表截屏:
SELECT MAX(Grade) as 最高分, MIN(Grade) as 最低分, AVG(Grade) as 平均分
FROM SC
WHERE Cno = '7'
–4) 找出各个系学生人数
–查询表截屏:
SELECT Sdept as 系, COUNT(*) as 人数 -- 最终目的是形成两列数据
FROM S
GROUP BY Sdept
–5) 找出各个系男女学生的人数
–查询表截屏:
SELECT Sdept as 系,Ssex as 性别, COUNT(*) as 人数
FROM S
GROUP BY Sdept ,Ssex --Group by 包含的,SELECT项必须也要包含
–6) 找出选修了3门以上课程的学生的学号
–查询表截屏:
SELECT Sno as 学号
from SC
GROUP BY Sno
HAVING COUNT(Cno) > 3 --having 后面不能直接用Cno>3,必须用COUNT(),相当于省略了含有where的一次周期查询
–7) 找出门门课程的成绩在80分以上的学生的学号
– 查询表截屏:
SELECT Sno as 学号
FROM SC
GROUP BY Sno
HAVING MIN(Grade) >80
–8) 找出均分>90分且没有课程成绩<80分的学生的学号。
–查询表截屏:
SELECT Sno as 学号
FROM SC
GROUP BY Sno
HAVING AVG(Grade) >90 AND MIN(Grade) >= 80 --并列条件用and
–9) 找出至少有2门课程不及格的学生的学号
–查询表截屏:
SELECT Sno as 学号
FROM SC
WHERE Grade <60 --可以提前筛选
GROUP BY Sno
HAVING COUNT(Grade )>=2
–10) 在商品表中查询商品的总数
– 查询表截屏:
USE 超市
SELECT COUNT(*)
FROM 商品
–11) 在销售表中查询商品的销售总数
–查询表截屏:
SELECT SUM(销售数量) as 销售总数 --括号内不加引号
FROM 销售
–12) 在营业员表中,找出各年份工作的营业员人数
–查询表截屏:
SELECT left(工作年月,4),COUNT(姓名) as 人数 --注意是年份,不含月份,人数可以随意使用列选取
FROM 营业员
GROUP BY left(工作年月,4)
–13) 在销售表中,找出销售所有商品的总数至少为35的营业员的记录
–查询表截屏:
SELECT 工号,SUM(销售数量) as 销售总数
FROM 销售
GROUP BY 工号
HAVING SUM(销售数量)>= 35 -- 不能跟新命名,要跟原始名称