SQL
SQL学习注意点
1.不等于用<>表示(有的数据库支持用!=表示)
2.SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。
3.ORDER BY 语句默认按照升序(ASC)对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
4.”%” 可用于定义通配符(模式中缺少的字母)。
笔记
1.insert语句
INSERT INTO 表名称 VALUES (值1, 值2,....)
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
2.update语句
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
3.delete语句
DELETE FROM 表名称 WHERE 列名称 = 值
在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:DELETE FROM table_name
或者DELETE * FROM table_name
4.top操作符
SELECT TOP 2 * FROM Persons
SELECT TOP 50 percent * FROM Persons
5.like操作符
SELECT * FROM Persons WHERE City LIKE 'N%'
可用 not like 来选取不符合的数据
6.通配符
通配符 | 描述 |
---|---|
% | 替代一个或多个字符 |
_ | 仅替代一个字符 |
[charlist] eg:[ABC] | 字符列中的任何单一字符 |
[^charlist]或者[!charlist] | 不在字符列中的任何单一字符 |
7.in操作符
用来在where语句中规定多个值
WHERE column_name IN (value1,value2,...)
8.between操作符
BETWEEN value1 AND value2
在 MySQL 、SQL server、oracle 中,between包括边界值,not between不包括边界值
使用between and 限定日期需要注意,如果and后的日期是到天的,那么默认为00:00:00 例如:and 后的日期为2013年3月24日,就等价于2013-3-24 00:00:00 ,那么2013-3-24 18:28:38的数据就查不到了
9.as操作符(Alias别名)
别名使查询程序更易阅读和书写。
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'
10.join操作符
join 一般和 on 连用
inner join
INNER JOIN 与 JOIN 是相同的。
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_namefull join
只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。
(在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。)left join
LEFT JOIN 关键字会从左表那里返回所有的行,即使在右表中没有匹配的行。
right join
RIGHT JOIN 关键字会右表那里返回所有的行,即使在左表中没有匹配的行。
假设有A和B两张表 :
1.A LEFT OUTER JOIN B表示把A表的记录都显示出来,把B表符合条件的结果集显示出来,不符合条件的用NULL表示。
2.A RIGHT OUTER JOIN B表示把B表的记录都显示出来,把A表符合条件的结果集显示出来,不符合条件的用NULL表示。
3.A FULL OUTER JOIN B 表示把A表和B表的记录都显示出来,不符合条件的用NULL表示。
4.A JOIN B 表示把A表和B表符合条件得结果集显示出来。
11.UNION 操作符
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
UNION 命令只会选取不同的值,若要列出所有的值,使用 UNION ALL 命令。
12*.SELECT INTO 语句
SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中,常用于创建表的备份复件或者用于对记录进行存档。
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
13.CREATE TABLE 语句
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
varchar 最大长度为 255 个字符
14.SQL 约束
NOT NULL 约束
NOT NULL 约束强制列不接受 NULL 值,意味着如果不向字段添加值,就无法插入新记录或者更新记录。
UNIQUE 约束
每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
UNIQUE可以为空,但是最多一个,否则就不唯一了。
MySQL:
Id_P int NOT NULL,
UNIQUE (Id_P)SQL Server / Oracle / MS Access:
Id_P int NOT NULL UNIQUE
*命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
*撤销 UNIQUE 约束
MySQL:
DROP INDEX uc_PersonID
SQL Server / Oracle / MS Access:DROP CONSTRAINT uc_PersonID
PRIMARY KEY 约束
主键必须是唯一的,且不能为空,每个表只能有一个主键。
它的语法和UNIQUE相同。
FOREIGN KEY 约束
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
MySQL:
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
MySQL 创建约束时和 SQL Server / Oracle / MS Access 的主要区别在于能否直接在要设置的约束属性后面声明。
在命名约束以及为多个列定义约束的语句两者相同。CHECK 约束
CHECK 约束用于限制列中的值的范围。
DEFAULT 约束
DEFAULT 约束用于向列中插入默认值,如果没有规定其他的值,那么会将默认值添加到所有的新记录。
15.*CREATE INDEX 语句
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
CREATE INDEX index_name ON table_name (column_name)
使用 DROP INDEX 命令删除表格中的索引:
MySQL 的语法:ALTER TABLE table_name DROP INDEX index_name
Oracle 语法:DROP INDEX index_name
16.*ALTER TABLE 语句
改变数据类型实例 :
ALTER TABLE table_name ALTER COLUMN table_name data_type
在表中添加列 :
ALTER TABLE table_name ADD column_name datatype
- 删除表中的列:
ALTER TABLE table_name DROP COLUMN column_name
17.AUTO INCREMENT 字段
MySQL语法:P_Id int NOT NULL AUTO_INCREMENT
默认AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。
- IFNULL() 函数
MySQL:
IFNULL(UnitsOnOrder,0))
如果UnitsOnOrder为空则让它的值为0
SQL Server / MS Access:
ISNULL(UnitsOnOrder,0)
Oracle:
NVL(UnitsOnOrder,0)