SQL学习笔记&&常用指令
RDBMS(relational database management system)为关系型数据库管理系统。
数据库是存储表和其它sql结构的容器。
数据库里的信息构成表。
表以一定的方式相关联
列是存储在表中的一块数据,行是一组描述某个事物的集合。
INSERT 插入数据
- 每一条针对表的指令都会要求指明表明,一般放在指令后一句
create关键字要求指明要创建的类型如database或table
CREATE TABLE soft_drink (drink_name VARCHAR(20),main VARCHAR(20),amount DEC(3,1),second VARCHAR(20),amount2 DEC(4,2),directions VARCHAR(60));
INSERT INTO soft_drink
VALUES
('Blackthorn','tonic water',1.5,'pineapple juice',1,'stir with ice strain into cock'),('blue moon','soda',1.5,'bluebeerry',.75,'stir with ice');
- 创建一个有primary key 的表,并使key值递增 AUTO_INCREMENT 关键字
CREATE TABLE my_table(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(30),
score DEC(4,1),
PRIMARY KEY(id));
INSERT
插入数据 id初始化值默认为1,每次加一,可用null进行插入,会默认为递增值,用其它值如‘8’会覆盖递增值,然后从8开始递增。key值不可重复,如果已经有key值为2,再用2会报错。
INSERT INTO my_table VALUES(NULL,'xiaohonghong',89);
INSERT INTO my_table VALUES(2,'xiaolanalan',100.0);
INSERT INTO my_table(name,score) VALUES('dahuilang',59.0);
INSERT INTO my_table(id,name,score) VALUES(NULL,'dahuilang',59.0);
INSERT INTO my_table VALUES(2,'xiaolanalan',100.0);
INSERT INTO my_table(name,score) VALUES('dahuilang',59.0);
SELECT选择
SELECT * FROM table;
SELECT column FROM table
WHERE
update更新
update 指令类似于select
update table_name SET 'a'='b' WHERE 'a'='c';
DELETE 删除
delete指令使用类似于SELECT
ALTER关键字。改变,可用来增加列,可用于增加主键列
//可用序数词first second third 等固定新列放置的位置。也可用after+列名
**ALTER TABLE table1**
**ADD COLUMN contact_id INT NOT NULL AUTO_INCREMENT FIRST,**
**ADD PRIMARY KEY(contact_ID);**
ALTER TABLE table1
ADD COLUMN sex VARCHAR(8);
ALTER TABLE table1
ADD COLUMN class VARCHAR(20)
AFTER name;
ALTER TABLE table1
RENAME TO student_table;
修改列名 同时可以修改数据类型,但是数据类型不兼容可能导致错误
ALTER TABLE student_table
CHANGE COLUMN subject subjects VARCHAR(30);
//update和set结合使用,从旧列中截取值放入新列
UPDATE table_name SET colunmn=left(column,3);
创建一个学生表+成绩表+科目表
CREATE TABLE student_table(
stu_number INT NOT NULL,
name VARCHAR(20),
subjects VARCHAR(20),
scores INT,
PRIMARY KEY(number)
);
CREATE TABLE score_table(
stu_number INT NOT NULL,
sub_number INT NOT NULL,
score INT
);
CREATE TABLE subject_table(
sub_number INT NOT NULL,
sub_name VARCHAR(20)
);
INSERT INTO student_table(stu_number,name)
VALUES(
'1900','stu1'
),('1901','stu2');
INSERT INTO subject_table(sub_name)
VALUES(
'CHINESE'),
('MATH'),
('ENGLISH');
INSERT INTO score_table(stu_number,sub_number,score)
VALUES(
'1900',1,90),
('1900',2,95),
('1900',3,99),
('1901',1,95),
('1901',2,98),
('1901',3,99);
case语句 update和case结合,用于批量的更新
UPDATE table_name SET a=
CASE
WHEN c='T' THEN 'd'
WHEN d='F' THEN 'e'
ELSE 'balabla'
END;
ORDER BY 排序关键字
//order by 排序函数 select函数与order by结合(update可以吗?),以特定的顺序将取出来的数据进行排列。先按a排,a相同按b排。。。。按ASCII码顺序
//DESC关键字,反序
SELECT balabala FROM table_name
ORDER BY a,b,c;
ORDER BY
SUM求和函数
SELCET SUM(balabala)
FROM table_name
WHERE a='bala';
分组关键字 GROUP BY
GROUP BY(balabala) 根据分组条件,将相同的分为一组
sum group by order by结合,将数据分组,求和,再按顺序排列出来
SELECT balabla SUM(a)
FROM table_name
GROUP BY(b)
OREDER BY(c)
AVG函数,求平均值
MAX MIN 函数,求最大最小值
DISTINCT 关键字 找出不重复信息
SELECT DISTINCT balabala
FROM table_name
ORDER BY c;
LIMIT关键字,可以限制显示的行数为两行
SCHEMA模式 数据库的视觉解析图
主键外键 外键不一定是父表的主键,但是必须有唯一性,声明外键语句
CREAT TABLE interets(
int id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
interest VARCHAR(50) NOT NULL,
contact_id INT NOT NULL,
CONSTRAINT my_contacts_contact_id//限制,告诉我们键的来源表
FOREIGN KEY(contact_id)//设置外键名
REFERENCES my_contacts(contact_id)//指定外键来源
);
表间关系
表与表之间存在一对一,一对多,多对多三种可能模式。
一对一
在模式图中用单纯实线,表示连接一件事物与另一件事物。父表只有一行与字表的某行相关
一对多
A表的某条记录在B表中可以找到多条记录,但是在B表中的某条记录在A表中只能找到一条对应记录。
在模式图中用黑色箭头来表示一对多的连接关系
多对多
连接线两端都有黑色箭头,多对多关系一定要创建中间表
junction_table 中间表
中间桥梁,简化多对多关系为一对多
composite key 组合键
由多个数据列构成的主键,组合各列后形成具有唯一性的键,组合主键
函数依赖
当某列的数据必须随着另一列的数据的改变而改变时,表示第一列函数依赖于第二列
速记符号:T.x->T.y 在关系表T中,y列函数依赖于x列
部分函数依赖
非主键的列依赖于组合主键的某个部分(但不是完全依赖于组合主键)
传递依赖
改变任何非键列可能造成其它列的改变,即为传递依赖。两个非键列间相互关联
2NF 表的主键如何与其它数据产生关系
2NF达成条件
已符合1NF的表所有列都是主键的一部分,则符合2NF。
所有列都是主键的一部分或者表中有唯一主键列符合1NF的表,也符合2NF,即无部分函数依赖性
联结多张表的操作
- CREATE TABLE 然后用SELECT 进行INSERT
CREATE TABLE balabala(
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
profession VARCHAR(20));
INSERT INTO balabala(balabala)
SELECT profession FROM my_contacts
GROUP BY profession
ORDER BY profession;
2.利用SELECT进行CREATE TABLE ,然后ALTER以添加主键
CREATE TABLE balabala AS
SELECT balabala FROM bala
GROUP BY balabala
ORDER BY balabala;
ALTER TABLE balabala
ADD COLUMN id INT NOT NULL AUTO_INCREMENT
ADD PRIMARY KEY(id);
3.CREARE TABLE的同时设置主键并利用SELECT填充
CREATE TABLE balabala(
id ~
balabala VARCHAR(20)
)
AS
SELECT balabala FROM bala
GROUP BY bala
ORDER BY bala;
关键字AS
AS能把SELECT的查询结果填入新表中
别名
在查询中首次使用原始列名的地方后接AS并设定要采用的别名,告诉软件现在开始以另一个名称引用某一列,可使查询更容易被理解。
表也可设置别名,设置方式和列一样。也可不使用as,只要别名紧跟着原名。
交叉联接
SELECT t.toy,b.boy
FROM toys AS t CROSS JOIN
boys AS b;
INTER JOIN //内联接
non-equijoin//不等联结
natural join // 自然联结
网友评论