当前位置:网站首页>数据库超话(一)
数据库超话(一)
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 查询语句
彩色记忆卡:
边栏推荐
- Gartner authority predicts eight development trends of network security in the next four years
- Mobile page layout
- Following the example of IE, is the decline of Firefox inevitable?
- How does vs2019 C language run multiple projects at the same time, how to add multiple source files containing main functions in a project and debug and run them respectively
- Lichuang EDA - layout and inspection of schematic diagram (III)
- MySQL - linked table query
- What are VO, do, dto and Po
- Lichuang EDA - PCB layout (IV)
- Getting started with unity
- Flex flex flex box layout 2
猜你喜欢

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

一文理解分布式开发中的服务治理

Windows and network foundation-15-local security policy

三表联查2

Three table joint query 2

Flex flex flex box layout

通过 FileUploader 的初始化,了解 SAP UI5 应用的 StaticArea 初始化逻辑

Kubernetes Part 7: using kubernetes to deploy prometheus+grafana monitoring system (kubernetes work practice class)

App Crash收集和分析

What is JSP?
随机推荐
微软默默给 curl 捐赠一万美元,半年后才通知
Kubernetes Part 7: using kubernetes to deploy prometheus+grafana monitoring system (kubernetes work practice class)
Subject 3: straight driving
Shell编程规范与变量
(2)融合cbam的two-stream项目搭建----数据准备
General process of background management system permission setting
Character stream read file
Hidden iframe design details of SAP ui5 fileuploader
通过 FileUploader 的初始化,了解 SAP UI5 应用的 StaticArea 初始化逻辑
Coca Cola's primary challenge is not vitality forest
Mobile end Foundation
三表联查1
Three table joint query 2
两表联查1
Niuke topic - the minimum number of K
步 IE 后尘,Firefox 的衰落成必然?
成本高、落地难、见效慢,开源安全怎么办?
App Crash收集和分析
腾讯云上传使用
Kubernetes第八篇:使用kubernetes部署NFS系统完成数据库持久化(Kubernetes工作实践类)