2018-06-26持续更新的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 语句计算任何数值的平方根:

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>

    原文作者:adorable_new
    原文地址: https://www.jianshu.com/p/f6b8da1792a4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞