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 语句计算任何数值的平方根:
PARTITION的用法
***() over (partition by A order by B)
按照A累计进行分区,按照B进行排序
rank() over是的作用是查出指定条件后进行一个排名,但是有一个特点。假如是对学生排名,那么实用这个函数,成绩相同的两名是并列;
dense_rank()的作用和rank()很像,唯一的一点区别就是,领命学生的成绩并列以后,下一位同学并不空出并列所占的名次;
row_number()就不一样了,它和上面两种的区别就很明显了,这个函数不需要考虑是否并列,哪怕根据条件查询出来的数值相同也会进行连续排名
group by是对检索结果的保留行进行单纯分组,一般和聚合函数一起使用例如max、min、sum、avg、count等一块用。partition by虽然也具有分组功能,但同时也具有其他的高级功能。
比如sum()over(),first_value() over()和last_value() over()的使用
count() over(partition by … order by …):求分组后的总数。
max() over(partition by … order by …):求分组后的最大值。
min() over(partition by … order by …):求分组后的最小值。
avg() over(partition by … order by …):求分组后的平均值。
lag() over(partition by … order by …):取出前n行数据。
lead() over(partition by … order by …):取出后n行数据。
ratio_to_report() over(partition by … order by …):
Ratio_to_report() 括号中就是分子,over() 括号中就是分母
所有的正则表达式函数都使用Java样式的语法。
<dl class=”function”>
<dt id=”regexp_extract_all”><tt class=”descname”>regexp_extract_all</tt><big>(</big>string, pattern<big>)</big> → array<varchar></dt>
<dd>
Returns the substring(s) matched by the regular expression <tt class=”docutils literal”>pattern</tt> in <tt class=”docutils literal”>string</tt>.
</dd>
</dl>
<dl class=”function”>
<dt><tt class=”descname”>regexp_extract_all</tt><big>(</big>string, pattern, group<big>)</big> → array<varchar></dt>
<dd>
Finds all occurrences of the regular expression <tt class=”docutils literal”>pattern</tt> in <tt class=”docutils literal”>string</tt> and returns the capturing group number <tt class=”docutils literal”>group</tt>.
</dd>
</dl>
<dl class=”function”>
<dt id=”regexp_extract”><tt class=”descname”>regexp_extract</tt><big>(</big>string, pattern<big>)</big> → varchar</dt>
<dd>
Returns the first substring matched by the regular expression <tt class=”docutils literal”>pattern</tt> in <tt class=”docutils literal”>string</tt>.
</dd>
</dl>
<dl class=”function”>
<dt><tt class=”descname”>regexp_extract</tt><big>(</big>string, pattern, group<big>)</big> → varchar</dt>
<dd>
Finds the first occurrence of the regular expression <tt class=”docutils literal”>pattern</tt> in <tt class=”docutils literal”>string</tt> and returns the capturing group number <tt class=”docutils literal”>group</tt>.
</dd>
</dl>
<dl class=”function”>
<dt id=”regexp_like”><tt class=”descname”>regexp_like</tt><big>(</big>string, pattern<big>)</big> → boolean</dt>
<dd>
Evaluates the regular expression <tt class=”docutils literal”>pattern</tt> and determines if it is contained within <tt class=”docutils literal”>string</tt>.
This function is similar to the <tt class=”docutils literal”>LIKE</tt> operator, expect that the pattern only needs to be contained within <tt class=”docutils literal”>string</tt>, rather than needing to match all of <tt class=”docutils literal”>string</tt>. In other words, this performs a contains operation rather than a match operation. You can match the entire string by anchoring the pattern using <tt class=”docutils literal”>^</tt> and <tt class=”docutils literal”>$</tt>.
</dd>
</dl>
<dl class=”function”>
<dt id=”regexp_replace”><tt class=”descname”>regexp_replace</tt><big>(</big>string, pattern<big>)</big> → varchar</dt>
<dd>
Removes every instance of the substring matched by the regular expression <tt class=”docutils literal”>pattern</tt> from <tt class=”docutils literal”>string</tt>.
</dd>
</dl>
<dl class=”function”>
<dt><tt class=”descname”>regexp_replace</tt><big>(</big>string, pattern, replacement<big>)</big> → varchar</dt>
<dd>
Replaces every instance of the substring matched by the regular expression <tt class=”docutils literal”>pattern</tt> in <tt class=”docutils literal”>string</tt> with <tt class=”docutils literal”>replacement</tt>. Capturing groups can be referenced in <tt class=”docutils literal”>replacement</tt> using <tt class=”docutils literal”>g for a numbered group or {name}</tt> for a named group. A dollar sign (<tt class=”docutils literal”>) may be included in the replacement by escaping it with a backslash (\</tt>).
</dd>
</dl>