SQL基础笔记
编者:张永辉 2014年4月30日
参考:百度文库 <SQL基础教程(免费下载).pdf>
建议:使用SQLite,不用建立服务器即可练习语句。使用sqlitedbviewer.exe或SQLite Expert工具。
1 创建表单
语法:
CREATE TABLE "TableName"
(
"ColumnName_1" [Type] [NOT NULL] [UNIQUE] [CHECK(conditie)] [REFERENCES TableName0(ColumnName_x)],
...
"ColumnName_n" "Type",
[PRIMARY KEY(ColumnName_x)]
)
"Type" 取值:
1 NULL 空值
2 INTEGER 带符号的整型,具体取决有存入数字的范围大小
3 REAL 浮点数字,存储为8-byte IEEE 浮点数
4 TEXT 字符串文本
5 BLOB 二进制对象
"NOT NULL" 限定此列不能有NULL
"UNIQUE" 限定此列不能有重复项
"CHECK(conditie)" 限定此列需要满足conditie条件 如 age INTEGER CHECK(INTEGER>0) MySql无此项
"PRIMARY KEY(ColumnName_x)" 指定主键。一个表可以有多个主键,既是组合键
"REFERENCES TableName0(ColumnName_x)"
外来键。此列的值'在另外一张表TableName0中的ColumnName_x列'中必须要存在,用于资料参考完整性。
eg CREATE TABLE man
(
name char[50],
addr char[50],
age int
);
2 增加或更改表内容
1 增加一行内容
语法:
INSERT INTO "TableName"("ColumnName_1",... ,"ColumnName_n")
VALUES('"ColumnName_1_vlue"',... ,'"ColumnName_n_vlue"');
eg INSERT INTO man(name,age,addr)
VALUES('zyhui',18,'chengdu');
2 从另外一张表中导入多行
语法:
INSERT INTO "TableName"("ColumnName_1",... ,"ColumnName_n")
SELECT "ColumnName_1",... ,"ColumnName_n" FROM "TableName0"
[WHERE];
eg INSERT INTO man2(name,age,addr)
SELECT name,age,addr FROM man;
3 更改一个值
语法:
UPDATE "TableName"
SET "ColumnName_x"="ColumnName_x_vlue"
...
SET "ColumnName_x"="ColumnName_x_vlue"
[WHERE];
eg UPDATE man2
SET age=28
WHERE name='zyhui';
4 删除一个值
语法:
DELETE FROM "TableName"
[WHERE]; 无条件时会删除所有内容
eg DELETE FROM man
WHERE name='zyhui';
3 查询操作
语法:
SELECT [DISTINCT] "ColumnName_x",
FROM "TableName"
[WHERE] 条件
[ORDER BY]; 排序
"DISTINCT" 重复的项只出现一次
eg SELECT DISTINCT name
FROM man
WHERE age > 20;
配合WHERE的表达式:
语法: 条件选择
WHERE ['a' AND 'b'] ['a' OR 'b'] [()]
AND 与
OR 或
() 优先顺序
eg SELECT DISTINCT name
FROM man
WHERE age > 20 AND age < 100
语法: 在VLUE中选取
WHERE "ColumnName" IN('VLUE_1','VLUE_n')
eg SELECT DISTINCT name
FROM man
WHERE age IN(21,66);
语法: 区间选择
WHERE "ColumnName" BETWEEN 'VLUE_x' AND 'VLUE_xx'
eg SELECT *
FROM man
WHERE age BETWEEN 10 AND 100;
语法: 区间选择
WHERE "ColumnName" LIKE '模式'
'模式'
_ 下划线: 任意一个字符
% 百分号: 任意多个字符
eg SELECT *
FROM man
WHERE name LIKE '%ww%'; 包含ww的任意字符串
'A_K'; ASK A1K 符合, A12K不符合
配合ORDER BY的表达式:
语法:
ORDER BY "ColumnName_1" [ASC] [DESC] , ["ColumnName_X" [ASC] [DESC]]
[ASC] 从小到大排序,不写时的默认排序
[DESC] 从大到小排序
若有多列,先按ColumnName_1排序,相同的按ColumnName_X排序
eg SELECT *
FROM man
ORDER BY name ASC , age DESC;
4 函数
求和
语法:
SELECT SUM("ColumnName")
FROM "TableName";
eg SELECT SUM(age))
FROM man;
计数
语法:
SELECT COUNT("ColumnName")
FROM "TableName"
[WHERE]
eg1 SELECT COUNT(age)
FROM man;
WHERE age is not NULL; 计算非空的行
eg2 SELECT COUNT(DISTINCT age) 计算不用行的数量
FROM man;