1.SQL不区分大小写
2.SQL每个语句后面都必须加分号
3.SQL可以分为DML(数据库操作语言)和DDL(数据库定义语言)
DML(查询、更新):SELECT UPDATE DELETE INSERT INTO
DDL(创建删除表格 也可以创建删除索引):
CREATE DATABASE 创建数据库
ALTER DATABASE 修改数据库
CREATE TABLE 创建表
ALTER TABLE 变更表
DROP TABLE 删除表
CREATE INDEX 创建索引(索引键)
DROP INDEX 删除索引
SQL SELECT语句:SELECT 列名 FROM 表名;
SELECT * FROM 表名;
例如:SELECT firstNam,lastName FROM persons;从persons表中获取列名为firstName和lastName的列的值
SQL SELECT DISTINCT语句: SELECT DISTINCT 列名 FROM 表名;
例如:SELECT DISTINCT firstName,lastName FROM person;从person表中获取列名为firstName和lastName的列的值,排除其中firstName和 lastName都相等的记录
SQL WHERE子句:用于规定查询条件;> < = >= <= <>(不等于) (BETWEEN XX AND XX) LIKE
条件的值如果不是数值,必须加单引号
SELECT * FROM person WHERE name <> 'name1';
SQL AND和OR运算符:SELECT * FROM person WHERE (firstName = 'name1' OR firstName = 'name2') AND lastName = 'name3';
SQL ORDER BY:对结果集进行排序
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:SELECT company,orders FROM person ORDER BY company DESC,orders ASC;
INSERT INTO:INSERT INTO person VALUES(value1,value2,....) INSERT INTO person(colum1,colum2,...) VALUES(value1,value2,....);
UPDATE...SET..:UPDATE demo SET name='name1',company='company2' WHERE id = xx;
DELETE FROM:DELETE FROM person WHERE name='name1';
TOP(SQL SERVER) LIMIT(MYSQL) ROWNUM<XXX---ORACLE:规定返回记录的数量
SQL SERVER : SELECT TOP 10 * FROM person WHERE name = 'name1';
MYSQL:SELECT * FROM person WHERE name = 'name1' LIMIT 10;
ORACLE: SELECT * FROM person WHERE name = 'name1' ROWNUM<10;
LIKE:SELECT * FROM person WHERE name LIKE
SQL通配符:% _ [charlist]符合charlist中的一个 [^charlist]不是charlist中的任一一个 [!charlist]不是charlist中的任何一个([]在mysql中一个也没查出来 在sqlserver中可 以查出来)
例:查找person表中name以n或m或r开头的name列 SELECT name FROM person WHERE name like '[nmr]%';
SQL IN:SELECT * FROM person WHERE name IN(value1,value2,value3,....);
例:在person表中选取姓名为name1或name2的人 SELECT * FROM person WHERE name IN('NAME1','NAME2');
BETWEEN ... AND ...:SELECT * FROM person WHERE age BETWEEN '10' AND '20';
NOT:查找条件的相反条件 SELECT * FROM person WHERE age NOT BETWEEN '10' AND '20';
AS:别名(可省略AS) SELECT * FROM person p where p.age = 20;
JOIN:table1 JOIN table2 ON table1 INNER JOIN table2 ON table1 LEFT JOIN table2 ON table1 RIGHT JOIN table2 ON
join 和 inner join是一样的:用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
例:谁订购了产品,并且他们订购了什么产品?(查询所有人的订购)
SELECT person.firstNaem,person.rightName,orders.num FROM person JOIN orders ON person.id=order.p_id;
等价于:SELECT person.firstNaem,person.rightName,orders.num FROM person,orders WHERE person.id=order.p_id;
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
例如:我们希望列出所有的人,以及他们的定购。
SELECT person.firstName,person.rigthName,orders.num FROM person LEFT JOIN orders ON person.id=order.p_id;
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
例如:我们希望找出所有的票,以及订购他们的人
SELECT person.firstName,person.rightName,orders.num FROM person RIGHT JOIN orders ON person.id=order.p_id;
FULL JOIN: 只要其中一个表中存在匹配,就返回行MYSQL不支持full join,可以用left join 和right join分别查出结果再用union组合结果,去掉重复的部分(多 查出了一次两个表都匹配的结果)
例如:我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人
SELECT person.firstName,person.lastName,orders.num FROM person FULL JOIN orders ON person.id=order.p_id;
等价于:SELECT person.firstName,person.lastName.orders.num FROM person LEFT JOIN orders ON person.id = order.p_id union
SELECT person.firstName,person.lastName.orders.num FROM person LEFT JOIN orders ON person.id = order.p_id;
UNION:用于合并两个或多个 SELECT 语句的结果集,UNION操作符默认选取不同的值,如果要保留相同的值用UNION ALL
注:UNION两边的SELECT语句必须要查询相同数量的列,并且每个查询的列都必须要有相同的数据类型
例:
列出Employees_China和Employees_USA中的E_Name,名字相同的只列一次
SELECT E_Name FROM Employees_China UNION SELECT E_Name FROM Employees_USA