当前位置:网站首页>数据库超话(一)
数据库超话(一)
2022-07-27 15:28:00 【泡泡里的月亮】
1.如何修改数据表
使用alter table命令
(1)add
alter table <表名>
add <列定义>|<完整性约束定义>
例子:
(1)增加列:
alter table S
add sn int(6)
(2)增加默认值约束
alter table S
add constraint DF_S_T default(2) for time
(3)增加主键约束
alter table S
add constraint PK_S_Id primary key(id)
(4)增加唯一键约束
alter table S
add constraint UQ_S_Name unique(id)
(5)增加外键键约束
alter table SC
add constraint FK_SC_S foreign key(sno) references S(sno)
6)增加check约束
alter table SC
add constraint Score_Chk check(score between 0 and 100)
注意:
- 使用此方式增加的新列自动填充NULL值,所以不能为增加的新列指定NOT NULL约束。
(2)alter
alter table <表名>
alter column<列名><数据类型>[null|not null]
例子:
(1)加宽列到12字符
alter table S
alter column sn nvarchar(12)
(2)修改数据类型
alter table TbStudent
alter column stuGender nchar(1)
(3)修改约束类型
alter table TbStudent alter column stuPhone char(11) not null
注意:
不能改变列名;
不能将含有空值的列的定义修改为NOT NULL约束;
若列中已有数据,则不能减少该列的宽度,也不能改变其数据类型;
只能修改NULL/NOT NULL约束,其他类型的约束在修改之前必须先将约束删除,然后再重新添加修改过的约束定义。
(3)drop
alter table <表名>
dorp aonstraint <约束名>
alter table <表名>
drop column <列名>
例子:
(1)删除约束
alter table S
drop constraint UQ_S_Name
(2)删除列
alter table S
drop column dept
2.区分count、count(*)
count(*):统计表中元组的个数。不可以去重,计算NULL 值
count([distinct] <列名>):统计列值个数。可以去重,不计算NULL
注意:
- 在库函数中,除COUNT(*)外,其他函数在计算过程中均忽略NULL值。
(1)求学校中共有多少个系。
SELECT COUNT(DISTINCT Dept) AS DeptNum FROM S
(2)统计有成绩的列值个数。
SELECT COUNT (Score) FROM SC
上例中成绩为0的同学也计算在内,没有成绩(即为空值)的不计算。
(3)查询出计算机系选课小于3门的学生的姓名、选课门数,包括没有选课的学生。要求按照选课门数的降序排序,如果选课门数相同,按照姓名升序排序
select sn,count(cno) 选课门数
from S left outer join SC on S.sno = SC.sno
where dept="计算机系"
group by S.sno
having count(cno)<3
order by count(cno) desc sn asc
(4)S表中男同学是每一年龄组(超过50人)的有多少人数,按人数升序排序,人数相同的按年龄降序
select <font color='red'>age </font>,count(*) 人数 #注意这里的age不能忘
from S
where sex='男'
group by age
having count( * )> 50
order by count(*),age desc
第(3)题不能使用count( * ),在没有选课的学生中,使用count(*)依然会计算出选课门数,而使用count(cno),直接算每组的课程号的数目,可以正确计算出选课数目
另外注意,count和group by连用时,count统计的数量是被group by 分组以后每一组中数据的数量,而不是分组的数量。
3.SQL语句的执行顺序
在SQLServer中
图片为网上大佬绘制
4.区分where、having以及清楚group by是使用
- GROUP BY子句中的分组依据列必须是表中存在的列名,不能使用AS子句指派的列别名。
- 指定GROUP BY时,选择列表中任一非聚合表达式内的所有列都应包含在
- WHERE子句用来筛选FROM子句中指定的数据源所产生的行数据。
- GROUP BY子句用来对经WHERE子句筛选后的结果数据进行分组。
- HAVING子句用来对分组后的统计结果再进行筛选。
- HAVING子句中能够使用三种要素:常数,聚合函数,GROUP BY子句中指定的列名(聚合建)
1.查询计算机系和信息管理系每个系的学生人数。
第一种:#(正确)
SELECT Sdept, COUNT(*) FROM Student
GROUP BY Sdept
HAVING Sdept in ( '计算机系', '信息管理系')
第二种:#(正确)
SELECT sdept, COUNT (*) FROM Student
WHERE Sdept in ( '计算机系', '信息管理系')
GROUP BY Sdept
2.查询每个系年龄小于等于20的学生人数。#(正确)
SELECT sdept,COUNT (*) FROM Student
WHERE Sage <= 20
GROUP BY Sdept
SELECT Sdept, COUNT(*) FROM Student# (错误)
GROUP BY Sdept
HAVING Sage <= 20
第二种错误的原因是Sage没有在group by中出现
注意:
- 可以在分组操作之前应用的筛选条件,在WHERE子句中指定更有效。
- 在HAVING子句中指定的筛选条件应该是那些必须在执行分组操作之后应用的筛选条件。
- 将所有应该在分组之前进行的筛选条件放在WHERE子句中而不是HAVING子句中。
5.常用数据操纵语言和数据定义语言的语法
修改数据表
Alter table <表名>
Add <列定义> |<完整性约束>
Alter table <表名>
Alter colum <列名><数据类型> [null | not null]
Alter table <表名>
drop constraint <约束名>|colum<列名>
删除基本表
Drop table <表名>
添加数据
Insert into <表名> [(<列名1>[,<列名2>])]
Values (<值>) | 子查询
修改数据
Update <表名>
Set <列名>=<表达式>[,<列名>=<表达式>]
[where <条件>]
删除数据
Delete
From <表名>
[where <条件>]
创建视图
Create view <视图名>[(视图列名)[, (视图列名)]
As 查询语句
彩色记忆卡:
边栏推荐
猜你喜欢

An analysis of CPU explosion of a smart logistics WCS system in.Net

Design details of hidden iframe and form elements used by SAP ui5 fileuploader

Flex弹性盒布局

Complete steps of JDBC program implementation

如何通过C#/VB.NET从PDF中提取表格

Microsoft silently donated $10000 to curl, which was not notified until half a year later

立创EDA——PCB的布局(四)

三表联查3

Bit band operation of semaphore protection

Lichuang EDA - PCB layout (IV)
随机推荐
VO、DO、DTO、PO是什么
步 IE 后尘,Firefox 的衰落成必然?
今日睡眠质量记录82分
记一次 .NET 某智慧物流 WCS系统 CPU 爆高分析
Unity 入门
Start from scratch blazor server (1) -- project construction
苹果官网罕见打折,iPhone13全系优惠600元;国际象棋机器人弄伤对弈儿童手指;国内Go语言爱好者发起新编程语言|极客头条...
Lichuang EDA - PCB layout (IV)
Chen Yili of ICT Institute: reducing cost and increasing efficiency is the greatest value of cloud native applications
SAP UI5 FileUploader 使用的隐藏 iframe 和 form 元素的设计明细
微软默默给 curl 捐赠一万美元,半年后才通知
腾讯云上传使用
Neural network implementation of handwritten numeral classification matlab
三表联查2
小于n的最大数
Kubernetes第七篇:使用kubernetes部署prometheus+grafana监控系统(Kubernetes工作实践类)
成本高、落地难、见效慢,开源安全怎么办?
Project exercise: the function of checking and modifying tables
Three table joint query 3
An analysis of CPU explosion of a smart logistics WCS system in.Net