SQL语言

SQL语言主要组成部分
  • 数据定义语言(DDL,Data Definition Language)
    是指用来定义和管理数据库以及数据库中的各种对象的语句,这些语句包括CREATE,ALTER和DROP等语句。在SQL Server中,数据库对象包括表、视图、触发器、存储过程、规则、缺省、用户自定义的数据类型等。这些对象的创建、修改和删除等都可以通过CREATE\ALTER和DROP等语句来完成。
  • 数据操纵语言(DML,Data Manipulation Language)
    是指用来查询、添加、、修改和删除数据库中数据语句,这些语句包括SELECT、INSERT、UPDATE、DALETE等。在默认情况下,只有sysadmin、dbcreator、db_owner或db_datawriter等角色的成员才有权利执行数据操纵语言。
  • 数据控制语言(DCL,Data Control Language)
    是用来设置或者更改数据库用户或角色权限的语句,这些语句包括GRANT、REVOKE、DENY等语句,在默认状态下,只有sysadmin、dbcreator、db_owner或db_securityadmin等角色的成员才有权利执行数据控制语言。

SQL语句
  • DDL
    建立表结构Create
CREATE TABLE <表名>
举例:
CREATE TABLE Student(
	sno char(10) primary key,
	sname varchar(20) not null,
	sage smallint,
	ssex char(2),
	sdept varchar(20))
CREATE TABLE Course(
	cno char(10),
	primary key(cno),
	cname varchar(20),
	cpno char(10),
	credit smallint)
CREATE TABLE SC(
	sno char(10),
	cno cahr(10),
	grade smallint,
	primary key(sno,cno))

删除表结构Drop

Drop Table student //一单一个表被删除,数据将不能被恢复

📺将整个关系模式(表结构)彻底删除,表中的数据也将被删除
修改表结构Alter

Alter Table Student Add phone char(16) //增加表中的属性
Alter Table Student Alter column sdept varchar(100) not null //修改表中的某属性
Alter Table Studnet Drop column sage //删除表中的某属性

练习:

--创建Student,Course,SC三张表(暂时不建立外码和唯一码Unique)
CREATE TABLE Student
CREATE TABLE Course
CREATE TAVLE SC
--为Student表添加籍贯(50个长度的变长字符串)列,查看表结构
Alter Table Student Add native varchar(50)
SHOW TABLE Student
--将Student表中的“籍贯”列的类型精度改为100,查看表结构
Alter Table Student Alter column native varchar(50)
SHOW TABLE Student
--删除Student表的“籍贯”列
Alter Table Studnet Drop solumn native
--删除这三张表
DROP TABLE Student
DROP TABLE Course
DROP TABLE SC
  • DML
    插入数据
    📟用SQL 的插入语句,向数据库中添加数据
Insert Into Student
Values('01001','张三',27,'M','CS') //按关系模式的属性顺序
Insert Into Student ( sno , sage, sname)
		Values (01002,NULL, ‘李四’) //按指定的属性顺序,也可以只添加部分属性(非Null属性为必需

修改数据
📷改变符合条件的某个(某些)元组的属性值

--将001学生转入MA系
Update Student
Set sdept='MA' Where sno='001'
--所有学生年龄加1
Update Student
Set sage=sage+1

删除数据
🎥只能对整个元组操作,不能只删除某些属性上的值。只能对一个关系起作用,若要从多个关系中删除元组,则必须对每个关系分别执行删除命令。从关系r中删除满足P的元组,知识删除数据,不是删除定义(表结构)。

--删除学号为001的学生的结伴信息
Delete From Student Where sno='001'
--删除选课而未参加考试的学生的选课信息
Delete From SC Where score is null
--删除所有学生的选课信息
Delete From SC

练习:

--为Student(10行以上),Course(8行以上),SC(25行以上)表添加记录
Insert Into Student
Values(XXXXX)
--为Student表添加列“班级号” (10个长度定长字符串)
Alter Table Student
Add columns classid char(10)
--为学生填写班级号(数字)
Update Student
Set calssid='XXX' Where sno='XX'

数据查询

☎️数据查询时数据库应用的核心功能
Where子句
📞查询满足指定条件的元组可以通过Where子句来实现。使where子句中的逻辑表达式返回True值的元组,是符合要求的元组,将被选择出来。

比较:<<=>>==<> 等
确定范围:
Between  A  and  B、Not Between A and B
确定集合:INNOT IN
字符匹配:LIKENOT LIKE
空值:IS NULLIS NOT NULL
多重条件:ANDORNOT
  • LIKE
    字符匹配:Like,Not Like
    通配符:%匹配任意字符串;_匹配任意一个字符
    大小写敏感
--列出张姓学生的学号、姓名
Select sno,sname
From Student
Where sname LIKE '张%'
--列出张姓且单名的学生的学号、姓名
Select sno,sname
From Student
Where sname LIKE '张_'
  • 转义符escape
--列出课程名中带有‘_’的课程号即课程名
Select cno,cname
From Course 
Where canme LIKE '%\_%' escape '\'
  • From
    列出将被查询的关系(表)
--列出所有学生的学号、姓名、课程号、成绩
Select Student.sno,cno,grade
From Student,SC
Where Student.sno=SC.sno
  • Order By
    指定结果集中元组的排列次序
    耗时
    ASC升序(缺省)、DESC降序
--列出CS系中的男生的学号、姓名、性别和年龄,并按年龄进行排序(降序)
Select sno,sname,ssex,sage
From Student
Where sdept='CS' and ssex='M'
Order By sage DESC
--检索选修C01或C02的学生学号
Select Sno FROM SC
Where Cno='C01' OR Cno='C02'
--检索成绩在70-80分之间的学生学号,课程号和成绩
Select * From SC
Where grade BETWEEN 70 and 80
--检索学号001,003,004的同学的性别,年龄(年龄按升序排列)
Select Sno,sage From Student
Where Sno IN ('001','003','004')
ORDER BY sage
//IN表示匹配若干指定值的行
--检索张三同学所学课程的课程号及成绩
Select Cno,grade
From Student,SC
Where Student.Sno=SC.Sno AND Sname='张三'
--检索所有学生的姓名、选课名称和成绩
Select Sname,Cname,grade
From Student,SC,Course
Where Student.Sno=SC.Sno and SC.Cno=Course.Cno

练习:

--查询选修“C05”课程,并且年龄不大于26岁的学生的学号和成绩,并按成绩降序排列
Select Sno,grade
From SC,Student
Where Cno='C05' and SC.Sno=Student.Sno and Sage<=26
Order By grade DESC
--查询MA系的女同学
Select Sno
From Student
Where Sdept='MA' and Ssex='F'
--查询CS系姓李的学生选修的课程列出学号,课程号和成绩
Select Sno,Cno,grade
From Student,SC,Course
Where Sdept='CS' and Student.Sno=SC.Sno adn Course.Cno=SC.Cno and Sname LIKE "李%"
--查询选修了数据库课程的学生的学号,成绩,按成绩降序排列
Select Sno,grade
From SC,Course
Where Cname='数据库' and SC.Cno=Course.Cno
Order By grade DESC
--找出学分为4分以上的课程的选修情况,列出学号,课程名,成绩
Select Sno,Cname,grade
From SC,Course
Where SC.Cno=Course.Cno and credit>4
--检索数据库的成绩在90分以上的学生的学号和姓名
Select Sno,Sname
From Course,SC,Student
Where Student.Sno=SC.Sno and SC.Cno=Course.Cno and grade>90
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章