2018-02-09持续更新的SQL语言
SQL学习笔记Structured Query Language:
对于SQL语言,有几个特点:
1 永远第一个出现的是关键字
2 以分号结尾,使多个查询可并列
3 SQL不区分大小写
下面是具体程序部分:
SQL语法系统学习
distinct的查询
SELECT distinct column1,column2…… FROM table_name where condition1 OR condition2 OR condition3;
插入,如果是针对所有列那么
INSERT INTO table_name (column1,column2……) values (value1. value2……);
空值的概念
`SELECT column_names
FROM table_name
WHERE column_name IS NULL;
SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;`
创建表的时候空值方法
CREATE TABLE CUSTOMERS( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25) , SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
产出的结果
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | |
| 7 | Muffy | 24 | Indore | |
+----+----------+-----+-----------+----------+
update语句,WHERE子句指定哪些记录需要更新。如果省略WHERE子句,所有记录都将更新!
UPDATE table_name SET column1=value1, column2=value2,... WHERE CONDITION;
选取前几个,在MySQL和Oracle库有细微的差别
SELECT column_names FROM table_name LIMIT number;
LIKE操作符:
有两个通配符与LIKE运算符一起使用:
% - 百分号表示零个,一个或多个字符
_ - 下划线表示单个字符
`SELECT column1,column2,...
FROM table_name
WHERE column LIKE pattern;
SELECT * FROM customer
WHERE city LIKE 'L_n_on';`
IN 操作符
IN运算符允许您在WHERE子句中指定多个值或者表
SELECT column_names FROM table_name WHERE column_name IN (SELECT column from table_w3c where...);
BETWEEN操作符
SELECT column_name FROM tabl_name WHERE column_name BETWEEN values and value2;
实例注意,不同数据库是否包括范围区间变量不同
SELECT * FROM products WHERE productname BETWEEN 'C' AND 'M';
JOIN语句,记住SELECT后面可以更上两个表的列,用浮点连接即可
INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行
SELECT Orders.orderID,Customer.CustomerName,Order.OrderDate FROM Orders INNER JOIN Customers ON ORDERS.CustomerID=Customers.CustomerID;
FULL OUTER JOIN 关键字返回左表(Customers)和右表(Orders)中的所有行。
如果"Customers"表中的行与"Orders"中的行不匹配,或者"Orders"表中的行与"Customers"表中的行不匹配,也将列出它们。
SELECT Customers.CustomerName, Orders.OrderID FROM Customers FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID ORDER BY Customers.CustomerName;
UNION ALL允许不同值,但是UNION只会选择一个值
SELECT column_name FROM table1 UNION SELECT column_name FROM table2;
select into插入新表,格式是select*into from,列或者表都可以使用,
也可以加上LEFT JOIN花式插入,实现拼接完成之后插入新表
SELECT Cusetomer.CustomerName,Orders.DrderID INTO customerorderbackup2013 FROM customers left join orders on customers.customername=order.orderID;
SQL撤销索引/表以及数据库,DROP INDEX在各个流程中不同
DROP TABLE table_name DROP DATABASE database_name;
SQL的CREATE TABLE语句,由行列组成,必须有名字,CREATE DATABASE是创建数据库的字段
CREATE TABLE persons ( personID int, lastname varchar(255), firstname varchar(255), address varchar(255), ));
ALTER TABLE的用法是在现有的列表添加删除或者修改列
ALTER TABLE table_name ADD column_type;
同理有DROP和ALTER COLUMN TYPE1 TYPE2
其他不常用的用法简介:
AUTO_INCREMENT,自动增量(auto-increment)字段,在新记录插入表中时生成一个唯一的数字。
SQL别名,
查询涉及多个表
用于查询函数
需要把两个或更多的列放在一起
列名长或可读性差
`SELECT column1, column2....
FROM table_name AS alias_name
WHERE [condition];
SELECT C.ID,C.NAME,C.AGE,O.AMOUNT
FROM CUSTOMERS AS C,ORDERS AS O
WHERE C.ID=O.CUSTOMER_ID;`
子查询语句。子查询和SELECT语句一起用,
子查询(Sub Query)或者说内查询(Inner Query),也可以称作嵌套查询(Nested Query)
SELECT column_name [, column_name ] FROM table1 [, table2 ] WHERE column_name OPERATOR (SELECT column_name [, column_name ] FROM table1 [, table2 ] [WHERE])
DISTINCT语句处理重复数据
SELECT DISTINCT column1, column2,.....columnN FROM table_name WHERE [condition];
SQL HAVING子句,和GROUP BY一起用的
WHERE 子句对被选择的列施加条件,而 HAVING 子句则对 GROUP BY 子句所产生的组施加条件。
SELECT COLUMN1 FROM TABLE1 WHERE [CONDITION] GROUP BY [CONDITIONS] ORDER BY COLUMN1;
SQL通配符
通配符 描述
百分号(%) 匹配一个或者多个字符。
注意:MS Access 使用星号(*)作为匹配一个或者多个字符的通配符,而不是百分号(%)。
下划线(_) 匹配一个字符。
注意:MS Access 使用问号(?),而不是下划线,来匹配任一字符。
函数大全
SQL TRIM()函数去除字符串头尾空格
SQL AVG() 函数返回数字列的平均值
COUNT() 函数返回符合指定条件的行数
CONCAT 函数用于将两个字符串连接为一个字符串
SQRT 函数用于计算得出任何数值的平方根。你可以像下面这样使用 SELECT 语句计算任何数值的平方根: