美文网首页
《HEAD FIRST SQL》学习笔记,初学SQL

《HEAD FIRST SQL》学习笔记,初学SQL

作者: 天心水月 | 来源:发表于2019-08-04 22:19 被阅读0次

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,即无部分函数依赖性

联结多张表的操作

  1. 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 // 自然联结

相关文章

网友评论

      本文标题:《HEAD FIRST SQL》学习笔记,初学SQL

      本文链接:https://www.haomeiwen.com/subject/hidudctx.html