明明就-——数据库学习
1.建数据库
CREATE DATABASE 数据库名;
2.建表
CREATE TABLE <表名>
(<列名><数据类型>[列级完整性约束条件],
<列名><数据类型>[列级完整性约束条件],
<列名><数据类型>[列级完整性约束条件],
...........
[表级完整性约束条件]
);
以Student、Course、SC表为例:
/*Student表*/
CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY,/*列级完整性约束条件,Sno为主键*/
Sname CHAR(20) UNIQUE,/*Sname取唯一值*/
Ssex CHAR(2),
Sage int,
Sdept CHAR(20)
);
/*Course表*/
CREATE TABLE Course(
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40) NOT NULL,
Cpno CHAR(4),/*先修课*/
Ccredit int,
FOREIGN KEY(Cpno)REFERENCES Course(Cno)
/*表级完整性约束t条件,Cpno是外码,被参考表是Course,被参照列是Cno*/
);
/*SC学生选课表*/
CREATE TABLE SC(
Sno CHAR(9),
Cno CHAR(4),
Grade int,
PRIMARY KEY(Sno,Cno),/*主码由两个属性组成*/
FOREIGN KEY(Sno) REFERENCES Student(Sno),/*表级完整性约束t条件,Sno是外码,被参考表是Student,被参照列是Sno*/
FOREIGN KEY(Cno) REFERENCES Course(Cno)
);
3.修改基本表
ALTER TABLE <表名>
[ADD [column]<新列名><数据类型>[完整性约束]]
[ADD <表级完整性约束>]
{DROP [column]<列名>[CASCADE/RESTRICT]]
[DROP CONSTRAINT<完整性约束>[RESTRICT/CASCADE]]
[ALTER column<列名><数据类型>];
/*注释:*/
例:
- 向Student表增加“入学时间”列,其时间类型为日期型
ALTER TABLE Student ADD S_entrance DATE;
- 将年龄的数据类型由字符型改为整数
ALTER TABLE Student ALTER column age INT;
4.删除基本表
DROP TABLE <表名>[RESTRICT/CASCADE];
例:删除Student表
DROP TABLE Student CASCADE;
5.数据查询
SELECT[ALL/DISTINCT]<目标列表达式>
from<表名或视图名>
[WHERE <条件表达式>]
[GROUP BY<列名>[HAVING <条件表达式>]]
[ORDER BY<列名>[ASC/DESC]];
例:查询所有考试成绩不及格的学生的学号
SELECT DISTINCT Sno
FROM SC
WHERE Grade<60;
例:确定范围
查询年龄在20~23(包括20岁和23岁)之间学生的姓名、系别、年龄
SELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;
例:确定集合
SELECT Sname,Ssex
FROM Student
WHERE Sdept IN('CS','MA','IS');
例:查询所有姓刘的学生的姓名
SELECT Sname
FROM Student
WHERE Sname LIKE"刘%';
例:查询选修了3号课程的学生的学号及其成绩,查询结果按分数的降序排列。默认是升序(ASC)
SELECT Sno,Grade
FROM SC
WHERE Cno='3'
ORDER BY Grade DESC;
例:查询平均成绩大于等于90分的学生学号和平均成绩
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno
HAVING AVG(Grade)>=90;
/*WHERE子句中不能用聚集函数作为条件表达式的,HAVING短语作用于组,从中选择满足条件的组*/
例:连接查询,
查询选修2号课程且成绩在90分以上的所有学生的学号和姓名
SELECT Student.*,SC.*
FROM Student,SC
WHERE Student.Sno=SC.Sno AND SC.Cno='2'AND SC.Grade>90;
5.数据更新
- 插入数据
INSERT INTO <表名>VALUES(<常量1>,[<常量2>]...);
- 修改数据
UPDATE<表名>
SET<列名>=<表达式> [,<列名>=<表达式>]...
[WHERE <条件>];
6.删除数据
DELETE FROM<表名>[WHERE <条件>]