SQL不区分大小写,本文是邹兆年老师的课件和课堂的部分内容总结,部分比较细的内容请看课件
Db笔记(1).pdf
SQL的数据定义
数据
数值型:
- 整型:INT/SMALLINT/BIGINT 4个字节/两个字节/八个字节
- 浮点型:NUMERIC/DECIMAL(p,s):定点数,p位有效数字,小数点后s位 比如numberic(3,1)可以精确储存44.5,但是不可以储存444.5或者33.2这样的数字
- FLOAT(n):浮点数,精度至少为n位数字
- REAL同FLOAT但是精度由DBMS决定
- DOUBLE PERCISION
布尔类型
- BOOLEAN 真值是TRUE/FALSE
字符串类型
- CHAR(n):定长字符串,长度为n,比如身份证号,一块一块存储比较方便
- VARCHAR(n)变长字符串:最大长度为n,省内存
- CLOB:超长字符串
枚举型和集合型
用户完整性
创建关系模式
创建表就得先创建数据库
下载postgre:不同的电脑操作不同可能会不好使
sudo apt-get update
sudo apt-get install postgresql postgresql-client
创建完毕后系统会创建一个postgre用户,感觉是服务器的用户所以本地找不到服务器的文件夹
sudo -i -u postgres
psql
这样就进入到了posgre中
create database 卑鄙的我;
退出postgres
\q 注意没有分号
包括:关系名、属性名、属性类型、主键、外键、完整性约束等:
CREATE TABLE Student{
#####关系名和属性#######
Sno CHAR(6); *Sno CHAR PRIMARY KEY;//这种方法只能定义含有一种属性关系
Sname VARCHAR(10);
Ssex CHAR;
Sage INT;
Sdept VARCHAR(20);
#####声明主键和外键#######
PRAMARY KEY (Sno) ///如果是双关系就PRMARY KEY(Sno,Sname);
PRAMARY KEY (Sno,Cno);
FORERGN KEY (Sno) REFERENCES Student(Sno)
};
{Sno,Cno}是SC的主键,Sno是SC的外键,参照Student关系的主键Sno,回忆外键
F的取值必须来源于R
操作演示1
查看所有的数据库
\l 查看所有的数据库
查看创建的表
查看属性
select * from student;
select Ssex from student;
select sno, sname from student where sdept = 'CS';
select sno, sname from student where sdept in ('CS', 'Math');
去重
select distinct Ssex from student;
返回大写的值/怎么不改变属性返回大写的值
select sno, upper(sname) from student;
select sno, upper(sname) as SNAME from student;
模糊查询
查询E开头的人物;
select sno, sname from student where sname like 'E%';
查询E开头,占两个字节的人物
select sno, sname from student where sname like 'E_';
select sno, sname from student where sname like 'E___';
操作演示 -------常见的错误提示
ERROR: duplicate key value violates unique constraint "student_pkey"
DETAIL: Key (sno)=(CS-001) already exists.
违反主键中元素的唯一性原则
ERROR: null value in column "sno" of relation "student" violates not-null constraint
DETAIL: Failing row contains (null, ABC, null, null, null).
违反主键不能为空的原则
ERROR: new row for relation "student" violates check constraint "student_sage_check"
DETAIL: Failing row contains (CS-005, ABC, null, -1, null).
找不到参考的值
操作演示2:
区分is & =
空是一个不确定的值不等用=只能用is
上课
*窗口函数
窗口函数并不是分组,具体查询DBMS手册
多关系查询
笛卡尔积
SELECT Student.Sno, Sname, Cno, Grade
FROM Student, SC
WHERE Student.Sno = SC.Sno;
explain加等于执行过程