数据库学习之路 四 sql语言的所有操作

当确信不再需要某个表时,可以将其删除
删除表时会将与表有关的所有对象一起删掉,包括表中的数据。
删除表的语句格式为:
DROP  TABLE  <表名>  { [, <表名> ] … }
例:删除test表的语句为:
DROP TABLE test
在定义完表之后,如果需求有变化,比如添加列、删除列或修改列定义,可以使用
ALTER TABLE语句实现。
ALTER TABLE语句可以对表添加列、删除列、修改列的定义、定义主码、外码,也可以添加和删除约束。 
ALTER TABLE <表名>  
  [ ALTER COLUMN <列名> <新数据类型>] 
| [ ADD [COLUMN] <列名> <数据类型> 
| [ DROP COLUMN <列名>  ] 
| [ADD PRIMARY KEY(列名 [,… n ]] 
| [ADD FOREIGN KEY(列名)
   REFERNECES 表名(列名)]

例2.为SC表添加“修课类别”列,此列的定义为:XKLB char(4)

ALTER TABLE SC
  ADD XKLB char(4) NULL 

例3.将新添加的XKLB的类型改为
char(6)。


ALTER TABLE SC
   ALTER COLUMN XKLB char(6)

例4.删除Course表的Period列。

ALTER TABLE Course 
  DROP COLUMN Period 

数据查询功能

SELECT <目标列名序列>    --需要哪些列
  FROM <数据源>              --来自于哪些表
 [WHERE <检索条件>]       --根据什么条件
 [GROUP BY <分组依据列>]      
 [HAVING <组提取条件>]
 [ORDER BY <排序依据列>] 
查询表中用户感兴趣的部分属性列。
例5:查询全体学生的学号与姓名。
SELECT Sno,Sname FROM Student
例6:查询全体学生的姓名、学号和所在系。
SELECT Sname,Sno,Sdept  
   FROM Student 
7.查询全体学生的记录
SELECT Sno,Sname,Ssex, Sage, Sdept         FROM Student
等价于:	
     SELECT  *  FROM Student 
8.查询全体学生的姓名及其出生年份。
	SELECT Sname,2006 - Sage  
         FROM Student
例9.查询全体学生的姓名和出生年份所在系,并在出生年份列前加入一个列,此列的每行数据均为‘出生年份’常量值。
SELECT Sname,‘出生年份’, 2006-Sage
   FROM Student 
语法:
列名 | 表达式 [ AS ] 列标题
或:
列标题 =列名 | 表达式
例:
   SELECT Sname 姓名,‘Year of Birth’ 出生年份,
        2006 - Sage 年份, 
      FROM Student 
10.在修课表中查询有哪些学生修了课程,要求列出学生的学号。
	  SELECT  Sno  FROM  SC
结果中有重复的行。
用DISTINCT关键字可以去掉结果中的重复行。
DISTINCT关键字放在SELECT词的后边、目标列名序列的前边。
	SELECT  DISTINCT  Sno  FROM  SC

在这里插入图片描述

11.查询计算机系全体学生的姓名。
	SELECT Sname FROM Student 
    WHERE Sdept = '计算机系'12.查询年龄在20岁以下的学生的姓名及年龄。
	SELECT Sname, Sage  FROM Student 
    WHERE Sage < 2013.查询考试成绩有不及格的学生的学号
   SELECT DISTINCT Sno  FROM SC 
    WHERE Grade < 60
BETWEENANDNOT BETWEENAND
是逻辑运算符,可以用来查找属性值在或不在指定范围内的元组,其中BETWEEN后边指定范围的下限,AND后边指定范围的上限。
BETWEENAND…的格式为:
   列名 | 表达式 [ NOT ] BETWEEN 下限值 AND 上限值
如果列或表达式的值在[不在]下限值和上限值范围内,则结果为True,表明此记录符合查询条件。
14.查询年龄在2023岁之间的学生的姓名、所在系和年龄。
SELECT Sname, Sdept, Sage  FROM Student 
	WHERE Sage BETWEEN 20 AND 2315.查询年龄不在2023之间的学生姓名、所在系和年龄。
SELECT Sname, Sdept, Sage  FROM Student 
	WHERE Sage NOT BETWEEN 20 AND 23
使用IN运算符。
用来查找属性值属于指定集合的元组。
格式为:
 列名 [ NOT ] IN (常量1, 常量2, … 常量n)
当列中的值与IN中的某个常量值相等时,则结果为True,表明此记录为符合查询条件的记录;
NOT IN:当列中的值与某个常量值相同时,则结果为False,表明此记录为不符合查询条件的记录 
16.查询信息系、数学系和计算机系学生的姓名和性别。
	SELECT Sname, Ssex  FROM Student 
	   WHERE Sdept IN ('信息系', '数学系', '计算机系')17.查询既不是信息系、数学系,也不是计算机系学生的姓名和性别。
	SELECT Sname, Ssex  FROM Student 
	 WHERE Sdept NOT IN ('信息系', '数学系', '计算机系')
使用LIKE运算符
一般形式为:
	  列名  [NOT ]  LIKE  <匹配串>
匹配串中可包含如下四种通配符:
_:匹配任意一个字符;
%:匹配0个或多个字符;
[ ]:匹配[ ]中的任意一个字符;
[ ^ ]:不匹配[ ]中的任意一个字符 
18.查询姓‘张’的学生的详细信息。
	SELECT * FROM Student 
    WHERE Sname LIKE '张%'19.查询学生表中姓‘张’、‘李’和‘刘’的学生的情况。
	SELECT * FROM Student 
    WHERE Sname LIKE ' [张李刘]%'20.查询名字中第2个字为‘小’或‘大’的学生的姓名和学号
    SELECT Sname, Sno FROM Student 
    WHERE Sname LIKE '_[小大]%'
21.查询所有不姓“刘”的学生。
	SELECT Sname FROM Student 
    WHERE Sname NOT LIKE '刘%‘
例22.查询学号的最后一位不是2、3、5的学生情况。
	SELECT * FROM Student 
    WHERE Sno LIKE '%[^235]' 

空值(NULL)在数据库中表示不确定的值。
例如,学生选修课程后还没有考试时,这些学生有选课记录,但没有考试成绩,因此考试成绩为空值。
判断某个值是否为NULL值,不能使用普通的比较运算符。
判断取值为空的语句格式为:
列名 IS NULL
判断取值不为空的语句格式为:
列名 IS NOT NULL 
23.查询无考试成绩的学生的学号和相应的课程号。
	SELECT Sno, Cno FROM SC 
    WHERE Grade IS NULL24.查询所有有考试成绩的学生的学号和课程号。
	SELECT Sno, Cno FROM SC 
    WHERE Grade IS NOT NULL 
WHERE子句中可以使用逻辑运算符ANDOR来组成多条件查询。
用AND连接的条件表示必须全部满足所有的条件的结果才为True;
用OR连接的条件表示只要满足其中一个条件结果即为True。
例25.查询计算机系年龄在20岁以下的学生姓名。
	SELECT Sname FROM Student 
    WHERE Sdept = 'CS' AND Sage < 20 
可对查询结果进行排序。 
排序子句为:
	ORDER BY <列名> [ASC | DESC ] [,<列名>]
说明:按<列名>进行升序(ASC)或降序(DESC)排序。
26.将学生按年龄的升序排序。
	SELECT * FROM Student ORDER BY Sage
例27.查询选修了‘c02’号课程的学生的学号及其成绩,查询结果按成绩降序排列。
SELECT Sno, Grade FROM SC
	WHERE Cno='c02' ORDER BY Grade DESC28.查询全体学生的信息,查询结果按所在系的系名升序排列,同一系的学生按年龄降序排列。
SELECT * FROM Student
	ORDER BY Sdept, Sage DESC  
SQL提供的计算函数有:
COUNT( * ):统计表中元组个数;
COUNT([DISTINCT] <列名> ):统计本列列值个数;
SUM([DISTINCT] <列名> ):计算列值总和;
AVG([DISTINCT] <列名> ):计算列值平均值;
MAX([DISTINCT] <列名> ):求列值最大值; 
MIN([DISTINCT] <列名> ):求列值最小值。
上述函数中除COUNT(*)外,其他函数在计算过程中均忽略NULL值。
29.统计学生总人数。
	SELECT COUNT(*) FROM Student 
例30.统计选修了课程的学生的人数。
	SELECT COUNT (DISTINCT Sno)
      FROM SC
例31 计算9512101号学生的考试总成绩之和。
SELECT SUM(Grade) FROM SC 
 WHERE Sno = '9512101' 
32.计算’C01’号课程学生的考试平均成绩。
	SELECT AVG(Grade) FROM SC 
    WHERE Cno='C01'33.查询选修了’C01’号课程的学生的最高分和最低分。
	SELECT MAX(Grade) , MIN(Grade)  
      FROM SC WHERE Cno='C01'
注意:计算函数不能出现在WHERE子句中
作用:可以控制计算的级别:对全表还是对一组。
目的:细化计算函数的作用对象。
分组语句的一般形式:
	  [GROUP BY <分组条件>] 
	  [HAVING <组过滤条件>] 

查询选修了分数大于90分的成绩
SELECT Sno as 课程号, AVG(Grade)
FROM SC GROUP BY Sno
HAVING AVG(Grade)>=60;
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YULIU_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值