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函数,学完应该就差不多了吧。。还有个触发器可能也要看看。