您的位置:首页 > 数据库

SQL入门学习笔记1.0

2017-06-02 17:03 232 查看

数据和表

数据库:保存表和其他相关SQL结果的容器

流程图中,数据库都是以圆柱体表示

列是存储在表中的一块数据。行是一组能够描述某个事物的流的集合。行和列构成了表

数据库中所有的表应该能以某种方式相互关联

创建数据库

CREATE DATABASE gregs_list;


使用刚才的数据库

USE gregs_list;


创建一个表

CREATE TABLE doughnut_list

(

doughnut_name VARCHAR(10),

doughnut_type VARCHAR(6)

);


CRATE TABLE 创建表

括号里输入表第一列和第二列名称

VARCHAR:保存以文本格式存储的信息

(6):表示这段文字的长度最多只有6个字符

各种数据类型

CHAR / CHARACTER

INT / INTEGER

DEC, DECIMAL

BLOB

DATE

TIMESTAMP / DATETIME

VARCHAR

《SQL技术手册》

查看创建的表

DESC my_contacts;


删除创建的表

DROP TABLE my_contacts;


添加数据:INSERT

INSERT INTO doughnut_purchases

(donut_type, dozens, topping, price)

VALUES

('jelly', 3, 'sprinkless', 3.50);


INSERT 语句的三种形式

改变列顺序:可改变列名和数据值的顺序

省略列名:数据值必须有,且与列顺序完全相同

省略部分列

SELECT语句查看表

SELECT*FROM my_contacts;


NULL:代表未定义的值

可以把列改为不接受NULL,但一定要提供NOT NULL列的值,否则会出现错误信息

CREATE TABLE my_contacts

(last_name VARCHAR (30) NOT null);


使用DEFAULT 填补空白

如果某些列通常有某个特定值,可把特定值指派为DEFAULT默认值

跟在DEFAULT关键字后的值会在每次新增记录时自动插入表中。

默认值的类型必须和列类型相同

CREATE TABLE doughnut_list

( doughnut_name VARCHAR(10) NOT NULL,

doughnut_cost DEC(3,2) NOT NULL DEFAULT 1.00);


SELECT语句

1.WHERE :提供搜索的特定条件

SELECT * FROM my_contacts

WHERE first_name = 'zhang';


*
:返回表中的所有列

2.单引号与不需要单引号

数据类型中,VARCHAR, CHAR,BLOB,DATA,TIME需要单引号。数字类的类型,DEC和INT不需要引号

3.当单引号为特殊字符,需加反斜线在单引号前再加单引号

INSERT INTO my_contacts

(location)

VALUES

('Grover\'s Mill');


INSERT INTO my_contacts

(location)

VALUES

('Grover''s Mill');


4.只显示特定数据

用列名代替 *

SELECT drink_name, main, second FROM easy_drinks WHERE main ='soda';


5.AND 同时处理两项查询

SELECT drink_name FROM easy_drinks

WHERE

main = 'soda'

AND

amount1 = 1.5


OR:返回符合条件之一的数据

6.比较运算符

* =

* <> / !=

* (>=)

* <=

* 可用于数据数据或文本数据的比较

SELECT drink_name

FROM drink_info

WHERE

drink_name >= 'L'

AND

drink_name < 'M';


7.用 IS NULL 找到 NULL

唯一直接选择NULL 的方法是利用关键字IS NULL

SELECT drink_name

FROM drink_info

WHERE

calories IS NULL;


8.LIKE 查找部分文本字符串并返回所有符合匹配条件的行

通配符%——任意数量未知字符的替身

SELECT first_name FROM my_contacts WHERE first_name LIKE '%im';


查询在first_name列中所有以im结尾的值

通配符下划线(_)——一个未知字符的替身

SELECT first_name FROM my_contacts WHERE first_name LIKE '_im';


查询结果例如:Kim

9.选取一个范围

AND

SELECT drink_name FROM drink_info

WHERE

calories >= 30

AND

calories <= 60;


BETWEEN

SELECT drink_name FROM drink_info

WHERE

calories BETWEEN 30 AND 60;


10.查找是否在多个筛选条件 IN

SELECT date_name FROM

black_book

WHERE

rating IN('innovative', 'fabulous',

'delightful', 'pretty good');


或者不符合特征的结果 NOT IN

SELECT date_name from black_book

WHERE NOT date_name LIKE  'A%'

AND NOT date_name LIKE 'B%';


DELETE 和 UPDATE

DELETE 与WHERE,AND,OR结合

DELETE FROM doughnut_ratings

WHERE location = 'Krispy King' AND rating >5;


2.创建新记录并删除旧记录

SELECT——INSERT——DELETE,先用SELECT 挑选你必须移除的记录,确认记录无误,并没有误删其他记录,用INSERT添加新的信息,再删除旧的信息

SELECT * FROM clown_info

WHERE

activities = 'dancing';


INSERT INTO clown_info

VALUES

('CLARABELLE', 'Belmont senior', 'F,pink hair', 'dancing');


DELETE FROM clown_info

WHERE

activities = 'yelling, dancing' AND name = 'Clarabelle';


UPDATE改变数据

UPDATE doughnut_ratings

SET

type = 'glazed'

WHERE type = 'plain glazed';


不加where子句,SET子句提到的表中的每行的每列都会被修改

只改变type列中数值为plain glazed的行使用UPDATE, 可以改变单一列或所有列的值。在SET子句中加入更多column=value组,期间以逗号分隔:

UPDATE your_table

SET first_column = 'newvalue',

second_column = 'another_value';


一次更改多个数值

UPDATE drink_info

SET cost = cost + 1

WHERE

drink_name = 'Blue Moon'

OR

drink_name = 'Oh My Gosh'

OR

drink_name = 'Lime Fizz';


聪明的表设计

创建表

表描述的事物

用什么方式描述事物

列是否包含原子性数据,让查询简短又方便

原子性数据 规则

具有原子性数据的列中不会有多个类型相同的值

具有原子性数据的表中不会有多个储存同类数据的列

规范化表的优点

规范化表中没有重复的数据,可以减少数据库的大小

因为查找的数据较少,查询更为快速。

完全的规范化INF

每个数据行必须包含具有原子性的值

每个数据行必须具有独一无二的识别项——主键

主键:表中的某个列,让每一条记录成为唯一的,用于独一无二地识别出每条记录。 PRIMARY KEY

主键的规则

主键不可以为NULL

插入新记录时必须制定主键值

主键必须简洁

主键值不可以被修改

为现有的表添加主键

ALTER TABLE 并添加PRIMARY KEY

ALTER TABLE my_contacts

ADD COLUMN contact_id INT NOT

AUTO_INCREMENT FIRST,

ADD PRIMARY KEY (contact_id);


AUTO_ONCREMENT

若在列的声明中使用这个关键字,则每次执行INSERT命令来插入数据时,它都会自动给列赋予唯一的递增整数值。

ALTER 改写历史

添加一列

ALTER TABLE my_contacts

ADD COLUMN phone VARCHAR(10)

AFTER birst name;


ADD COLUMN 添加列

ALTER :把phone列放在birst_name列后

不使用的话,新列会添加到表最后

修改表

CHANGE :可同时改变现有列的名称和数据类型

MODIFY:修改现有列的数据类型和位置

ADD:在当前表中添加一列

DROP:从表中删除某列

DESCRIBE 查看表的构成

更换名称

更换表的名称

ALTER TABLE projekts

RENAME TO project_list;


改变列名,并标注为主键

ALTER TABLE project_list

CHANGE COLUMN number proj_id INT NOT NULL AUTO_INCREMENT,

ADD PRIMARY KEY (proj_id);


AUTO_INCREMENT自动填入递增的整数

ADD……——使用新命令的列作为主键

更换两个列

ALTER TABLE project_list

CHANGE COLUMN descriptionof proj_desc VARCHAR(100),

CHANGE COLUMN contractoronj con_name VARCHAR(30);


只改变数据类型, 关键字:MODIFY

ALTER TABLE project_list

MODIFY COLUMN proj_desc VARCHAR(120);


project_list 要修改的列名

VARCHAR(120)新数据类型, 保证新类型不会造成旧数据被截断。

卸除列DROP COLUMN

ALTER TABLE project_list

DROP COLUMN start_date;


使用FIRST, LAST, BEFORE column_name, AFTER column_name, SECOND,THIRD, FOURTH等关键字,可调整列的顺序

增加数据的原子性——把一列分成两列,如:将(Seattle , WA) 分成不同的两个列

提取字符

RIGHT()和LEFT()可以从列中选出指定数量的字符

SELECT RIGHT(location, 2) FROM my_contacts;


(RIGHT从列的右侧开始

2 从列的右侧开始选取的字符数量)

选取逗号前的所有内容SUBSTRING_INDEX()

SELECT SUBSTRING_INDEX(location, ',', 1) FROM my_contacts;


(SUBSTRING_INDEX,提取单引号里的字符串,然后取出它前面的所有内容

, 命令要寻找的逗号

1表示名利要寻找的第一个逗号,然后提取它前面的所有内容)

将现有列的内容填入新列

UPDATE my_contacts

SET state = RIGHT(location, 2);


(state, 储存州数据的新列

RIGHT……..提取location列的最后两个字符)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐