SQL学习笔记第3次

1、UNION:就是把两个select的结果合并,相同值只取一个。

但必须满足下面的条件:

两个select语句要有相同数量的列。

列要有相似的数据。

列的顺序必须相同。

SELECT * FROM person

UNION

SELECT * FROM person_old;

#报错,"The used SELECT statements have a different number of columns"列的数量不相同。

 

SELECT FirstName,LastName,City FROM person

UNION

SELECT FirstName,LastName,City FROM person_old;

#成功,同样的数据只显示了一个,用UNION ALL的话,就全部都显示出来了。

2、SQL创建表(Create Table)时的约束:

a、Not Null:非空。(PRIMARY KEY自身就有Not Null属性)

b、Unique:唯一。(PRIMARY KEY自身就有Unique属性)

c、PRIMARY KEY:主键,唯一的标识。(每个表只能有1个主键)

d、FOREIGN KEY:外键,另一个表的主键,可以多个。(用于预防非法数据插入,因为必须是另一个表中的值)

CREATE TABLE Orders

(

O_Id int NOT NULL,

OrderNo int NOT NULL,

Id_P int,

PRIMARY KEY (O_Id),

FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)

)

#MYSQL新建表

 

CREATE TABLE Orders

(

O_Id int NOT NULL PRIMARY KEY,

OrderNo int NOT NULL,

Id_P int FOREIGN KEY REFERENCES Persons(Id_P)

)

#SQL Server / Oracle / MS Access

如果表已经存在,那么可以:

ALTER TABLE person_order

ADD FOREIGN KEY (id_o)

REFERENCES person(order_number);

#第一次执行的时候,报错,检查了因为id_o里有个4,而person表中的order_number字段没有4,所以添加不成功,删除4那一行后,就成功了。

3、创建索引,说是用来加快查询了,一般索引常查询的列就可以了。

CREATE INDEX IndexPerson ON person(order_number,FirstName);

#看起来就是建立了一个简化的表,这样列数就少一些,查起来就快一些。。吧。。。

4、AUTO INCREMENT,这是一个字段属性,让主键自动从1开始,每次新增数据时,主键自动填写,每次+1.

这个属性在各个数据库中用法都不一样。

CREATE TABLE Persons

(

P_Id int NOT NULL AUTO_INCREMENT,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

PRIMARY KEY (P_Id)

)

#新建时的模板

 

ALTER TABLE person MODIFY order_number INT(2) NOT NULL AUTO_INCREMENT;

#实验一下,把order_number添加了自动写值的属性。

 

INSERT INTO person(LastName,FirstName,Address,City,age,alive) VALUE('wang','li','China','shanghai',25,'alive');

#自动填写了order_number值,虽然前面已经有1234,但不会报错,会继续从5开始自动填写。

 

ALTER TABLE person AUTO_INCREMENT=10;

#用这个语句,可以规定开始的序号。比如从10开始

5、view:视图,看起来像是一个虚拟的表,由一个或多个实际的表合成,对实际的表不影响。

CREATE VIEW view_name AS

SELECT column_name(s)

FROM table_name

WHERE condition

#语法

 

CREATE VIEW personViews AS SELECT FirstName,LastName FROM person WHERE alive='alive';

#实验一下,创建了一个视图。

 

CREATE VIEW personOrders AS

SELECT * FROM person JOIN person_order ON person.order_number=person_order.id_o;

#用INNER JOIN联合了两张表做了一个视图。

 

DROP VIEW personOrders;

#删除视图

 

CREATE VIEW personOrders AS

SELECT person.FirstName,person.age,person_order.item

FROM person JOIN person_order

ON person.order_number=person_order.id_o;

#选择指定的列,看起来更方便

6、NULL值不等于0,MYSQL可以用 IFNULL(XXX,0)来判断,如果不是NULL,则返回XXX,如果为空,则返回0.

7、数据类型不想写了,用的时候baidu吧。。。

8、下次开始学SQL函数,学完应该就差不多了吧。。还有个触发器可能也要看看。

posted on 2013-04-15 16:47  百舸争流info  阅读(151)  评论(0编辑  收藏  举报

导航