order by
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC;
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC;
insert into
INSERT INTO 表名称 VALUES (值1, 值2,....);
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....);
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing');
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees');
update
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' ;
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson';
delete
DELETE FROM 表名称 WHERE 列名称 = 值;
DELETE FROM Person WHERE LastName = 'Wilson';
可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_name;
DELETE * FROM table_name;
top mysql
;
like
SELECT * FROM Persons WHERE City LIKE 'N%';
提示:"%" 可用于定义通配符(模式中缺少的字母)。
以g结尾的city
SELECT * FROM Persons WHERE City LIKE '%g';
包含lon的city
SELECT * FROM Persons WHERE City LIKE '%lon%';
不包含
SELECT * FROM Persons WHERE City NOT LIKE '%lon%';

 其他通配符
%                                   替代一个或多个字符
_                                   仅替代一个字符
[charlist]                           字符列中的任何单一字符
[^charlist] 或者 [!charlist]  不在字符列

---------------------------------
SELECT * FROM Persons  WHERE FirstName LIKE '_eorge';

SELECT * FROM Persons  WHERE LastName LIKE 'C_r_er';

我们希望从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:
SELECT * FROM Persons  WHERE City LIKE '[ALN]%';
上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人:
SELECT * FROM Persons  WHERE City LIKE '[!ALN]%';
in
语法
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);

---------------
SELECT * FROM Persons
WHERE LastName IN ('Adams','Carter');

----------------------------------------
between .....and
以字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之间的人,
SELECT * FROM Persons
WHERE LastName
BETWEEN 'Adams' AND 'Carter';

SELECT * FROM Persons
WHERE LastName
NOT BETWEEN 'Adams' AND 'Carter';
Alias
SELECT column_name AS alias_name
FROM table_name;
join
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P ;

-------------或者
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName;
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName;

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName;

希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName;
union
UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2;

SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA;
select into
SQL SELECT INTO 语法
您可以把所有的列插入新表:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
或者只把希望的列插入新表:
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename
------------
下面的例子会制作 "Persons" 表的备份复件:
SELECT *
INTO Persons_backup
FROM Persons;

IN 子句可用于向另一个数据库中拷贝表:
SELECT *
INTO Persons IN 'Backup.mdb'
FROM Persons;

SELECT LastName,FirstName
INTO Persons_backup
FROM Persons;

下面的例子通过从 "Persons" 表中提取居住在 "Beijing" 的人的信息,创建了一个带有两个列的名为 "Persons_backup" 的表:
SELECT LastName,Firstname
INTO Persons_backup
FROM Persons
WHERE City='Beijing';

SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P;

从其他表筛选部分字段,结合默认字段值给新表添加数据insert into sp_seller (user_id,seller_no,level,status,CREATED_BY,CREATED_ON,UPDATED_BY,UPDATED_ON) select id,substr(role_no,1,3),1,0,'sys',now(),'sys',now() from sp_user where user_type=9 ;
视图注释:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。
create or replace view v_user (user_id,seller_uid,user_type,nick_name,real_name,bind_mobile, registre_time) as
    select
        u.id,
        case
             then u.id
            else u.recommender_id
        end,
        u.user_type,
        u.nick_name,
        u.REAL_NAME,
        u.BIND_MOBILE,
        u.register_time
    from
        sp_user u
    where
        exists( select 

            from
                sp_seller s
            where
                s.user_id = u.recommender_id)
            ;
SQL DROP VIEW Syntax
DROP VIEW view_name;
行转列
select u.real_name,da.inv1,da.inv3,da.inv6,da.inv9,da.inv12 from sp_user u left join(

select seller_id,sum(amount),
      end) inv1,
      end) inv3,
      end) inv6,
      end) inv9,
      end) inv12
       ;
索引
CREATE INDEX
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。

用户无法看到索引,它们只能被用来加速搜索/查询。
注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

CREATE INDEX index_name
ON table_name (column_name)
注释:"column_name" 规定需要索引的列。

在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name
ON table_name (column_name)

 删除索引
用于 MySQL 的语法:
ALTER TABLE table_name DROP INDEX index_name;
TRUNCATE TABLE 表名称
如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢?
请使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据):
TRUNCATE TABLE 表名称
ALTER

ALTER TABLE 语句用于在已有的表中添加、修改或删除列。

ALTER TABLE table_name
ADD column_name datatype;

ALTER TABLE table_name
ALTER COLUMN column_name datatype;

现在,我们希望在表 "Persons" 中添加一个名为 "Birthday" 的新列。
我们使用下列 SQL 语句:
ALTER TABLE Persons ADD Birthday date;

ALTER TABLE Person
DROP COLUMN Birthday;
自增mysql

CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName ) NOT NULL,
FirstName ),
Address ),
City ),
PRIMARY KEY (P_Id)
)

要让 AUTO_INCREMENT 序列以其他的值起始,请使用下列 SQL 语法:
;

用于 SQL Server 的语法
下列 SQL 语句把 "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键:
CREATE TABLE Persons
(
P_Id int PRIMARY KEY IDENTITY,
LastName ) NOT NULL,
FirstName ),
Address ),
City )
)
MS SQL 使用 IDENTITY 关键字来执行 auto-increment 任务。
默认地,,每条新记录递增 。
要规定 "P_Id" 列以  起始且递增 ,请把 ,);

Oracle
您必须通过 sequence 对创建 auto-increment 字段(该对象生成数字序列)。
请使用下面的 CREATE SEQUENCE 语法:
CREATE SEQUENCE seq_person
MINVALUE
START
INCREMENT
CACHE
上面的代码创建名为 seq_person 的序列对象,它以  起始且以  递增。该对象缓存  个值以提高性能。CACHE 选项规定了为了提高访问速度要存储多少个序列值。
要在 "Persons" 表中插入新记录,我们必须使用 nextval 函数(该函数从 seq_person 序列中取回下一个值):
INSERT INTO Persons (P_Id,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')
上面的 SQL 语句会在 "Persons" 表中插入一条新记录。"P_Id" 的赋值是来自 seq_person 序列的下一个数字。"FirstName" 会被设置为 "Bill","LastName" 列会被设置为 "Gates"。
MySQL Date
下面的表格列出了 MySQL 中最重要的内建日期函数:
函数                                描述
NOW()                    返回当前的日期和时间
CURDATE()            返回当前的日期
CURTIME()               返回当前的时间
DATE()                    提取日期或日期/时间表达式的日期部分
EXTRACT()                    返回日期/时间按的单独部分
DATE_ADD()            给日期添加指定的时间间隔
DATE_SUB()            从日期减去指定的时间间隔
DATEDIFF()            返回两个日期之间的天数
DATE_FORMAT()    用不同的格式显示日期/时间 

SQL Date 数据类型
MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:
DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
YEAR - 格式 YYYY 或 YY

DATETIME
日期和时间的组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。MySQL以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,但允许使用字符串或数字为DATETIME列分配值。
 TIMESTAMP[(M)]
时间戳。范围是'1970-01-01 00:00:00'到2037年。
TIMESTAMP列用于INSERT或UPDATE操作时记录日期和时间。如果你不分配一个值,表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间。也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。

TIMESTAMP值返回后显示为。      
null

SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL;

SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL;

MySQL
MySQL 也拥有类似 ISNULL() 的函数。不过它的工作方式与微软的 ISNULL() 函数有点不同。
在 MySQL 中,我们可以使用 IFNULL() 函数,就像这样:
))
FROM Products
或者我们可以使用 COALESCE() 函数,就像这样:
))
FROM Products
MySQL 数据类型
在 MySQL 中,有三种主要的类型:文本、数字和日期/时间类型。
Text 类型:
数据类型                          描述
 个字符。
 个字符。
                  注释:如果值的长度大于 ,则被转换为 TEXT 类型。
TINYTEXT          存放最大长度为  个字符的字符串。
, 个字符的字符串。
BLOB              用于 BLOBs (, 字节的数据。
MEDIUMTEXT        存放最大长度为 ,, 个字符的字符串。
MEDIUMBLOB        用于 BLOBs (,, 字节的数据。
LONGTEXT          存放最大长度为 ,,, 个字符的字符串。
LONGBLOB          用于 BLOBs (,,, 字节的数据。
ENUM(x,y,z,etc.)  允许你输入可能值的列表。可以在 ENUM 列表中列出最大  个值。如果列表中不存在插入的值,则插入空值。
                  注释:这些值是按照你输入的顺序存储的。
                       可以按照此格式输入可能的值:ENUM('X','Y','Z')
 个列表项,不过 SET 可存储一个以上的值。
Number 类型:
数据类型                         描述
 到  常规。 到  无符号*。在括号中规定最大位数。
 到  常规。 到  无符号*。在括号中规定最大位数。
MEDIUMINT(size)    到  普通。  无符号*。在括号中规定最大位数。
 到  常规。 到  无符号*。在括号中规定最大位数。
 到  常规。 到  无符号*。在括号中规定最大位数。
FLOAT(size,d)     带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DOUBLE(size,d)    带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DECIMAL(size,d)   作为字符串存储的 DOUBLE 类型,允许固定的小数点。
 开始,而不是某个负数。
Date 类型:
数据类型                          描述
DATE()                  日期。格式:YYYY-MM-DD
                        注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'
DATETIME()              *日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS
                        注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
TIMESTAMP()
                        *时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS
                        注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
TIME()                  时间。格式:HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59'
 位或  位格式的年。
                        注释: 位格式所允许的值: 到 。 位格式所允许的值: 到 ,表示从  到 。
* 即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。    
sql  服务器

DBMS - 数据库管理系统(Database Management System)
数据库管理系统是一种可以访问数据库中数据的计算机程序。
DBMS 使我们有能力在数据库中提取、修改或者存贮信息。
不同的 DBMS 提供不同的函数供查询、提交以及修改数据。
RDBMS - 关系数据库管理系统(Relational Database Management System)
关系数据库管理系统 (RDBMS) 也是一种数据库管理系统,其数据库是根据数据间的关系来组织和访问数据的。
 世纪  年代初,IBM 公司发明了 RDBMS。
RDBMS 是 SQL 的基础,也是所有现代数据库系统诸如 Oracle、SQL Server、IBM DB2、Sybase、MySQL 以及 Microsoft Access 的基础。
函数的语法
内建 SQL 函数的语法是:
SELECT function(列) FROM 表;

AVG 函数返回数值列的平均值。NULL 值不包括在计算中。

现在,我们希望找到 OrderPrice 值高于 OrderPrice 平均值的客户。
我们使用如下 SQL 语句:
SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders);

SQL COUNT() 语法
SQL COUNT(column_name) 语法
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入):
SELECT COUNT(column_name) FROM table_name

现在,我们希望计算 "Orders" 表中不同客户的数目。
我们使用如下 SQL 语句:
SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers FROM Orders;

FIRST() 函数
FIRST() 函数返回指定的字段中第一个记录的值。
提示:可使用 ORDER BY 语句对记录进行排序。
SQL FIRST() 语法
SELECT FIRST(column_name) FROM table_name;

MAX() 函数
MAX 函数返回一列中的最大值。NULL 值不包括在计算中。
SQL MAX() 语法
SELECT MAX(column_name) FROM table_name;
现在,我们希望查找 "OrderPrice" 列的最大值。
我们使用如下 SQL 语句:
SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders;

MIN 函数返回一列中的最小值。NULL 值不包括在计算中。
SQL MIN() 语法
SELECT MIN(column_name) FROM table_name

SUM() 函数
SUM 函数返回数值列的总数(总额)。
SQL SUM() 语法
SELECT SUM(column_name) FROM table_name;

GROUP BY 语句
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
SQL GROUP BY 语法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
SQL HAVING 语法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;

现在,我们希望查找订单总金额少于  的客户。
我们使用如下 SQL 语句:
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
;

现在我们希望查找客户 "Bush" 或 "Adams" 拥有超过  的订单总金额。
我们在 SQL 语句中增加了一个普通的 WHERE 子句:
SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer='Bush' OR Customer='Adams'
GROUP BY Customer
;
UCASE() 函数
UCASE 函数把字段的值转换为大写。
SQL UCASE() 语法
SELECT UCASE(column_name) FROM table_name;

我们使用如下 SQL 语句:
SELECT UCASE(LastName) as LastName,FirstName FROM Persons;

LCASE() 函数
LCASE 函数把字段的值转换为小写。
SQL LCASE() 语法
SELECT LCASE(column_name) FROM table_name;
MID() 函数
MID 函数用于从文本字段中提取字符。
SQL MID() 语法
SELECT MID(column_name,start[,length]) FROM table_name;

现在,我们希望从 "City" 列中提取前  个字符。
我们使用如下 SQL 语句:
,) as SmallCity FROM Persons;

参数                     描述
column_name    必需。要提取字符的字段。
start                    必需。规定开始位置(起始值是 )。
length            可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。                        
ROUND() 函数
ROUND 函数用于把数值字段舍入为指定的小数位数。
SQL ROUND() 语法
SELECT ROUND(column_name,decimals) FROM table_name

参数                    描述
column_name    必需。要舍入的字段。
decimals            必需。规定要返回的小数位数。                

现在,我们希望把名称和价格舍入为最接近的整数。
我们使用如下 SQL 语句:
) as UnitPrice FROM Products;

NOW() 函数
NOW 函数返回当前的日期和时间。
提示:如果您在使用 Sql Server 数据库,请使用 getdate() 函数来获得当前的日期时间。
SQL NOW() 语法
SELECT NOW() FROM table_name;

现在,我们希望显示当天的日期所对应的名称和价格。
我们使用如下 SQL 语句:
SELECT ProductName, UnitPrice, Now() as PerDate FROM Products;
FORMAT() 函数
FORMAT 函数用于对字段的显示进行格式化。
SQL FORMAT() 语法
SELECT FORMAT(column_name,format) FROM table_name;

现在,我们希望显示每天日期所对应的名称和价格(日期的显示格式是 "YYYY-MM-DD")。
我们使用如下 SQL 语句:
SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDate
FROM Products;

最新文章

  1. MediaElement 的两种模式
  2. Javascript中的函数
  3. Javascript and DOM学习
  4. 【转】C++中多重继承的二义性及解决办法
  5. Asp.Net WebApi 启用CORS跨域访问指定多个域名
  6. 热爱工作 发财机会大增(这里不是选择软件还是硬件的问题,是自己的性格和追求的问题)——当你的老板不如你懂行的时候,还赚的盆满钵满的时候,你就可以考虑独立了 good
  7. DataSet ,DataTable,DataRow 之间的关系与使用
  8. 搭建Hadoop集群 (二)
  9. NET 中的多线程
  10. 【Android 应用开发】 自定义 圆形进度条 组件
  11. vue关于为空使用默认值
  12. mybatis 中的 update 返回值你真的明白吗
  13. SQL insert
  14. 用微信小程序连接leancloud数据库注意事项~
  15. Codeforces 803 G. Periodic RMQ Problem
  16. Hadoop端口说明
  17. SpringMCV跨域
  18. CSS 基础:HTML 标记与文档结构(1)<思维导图>
  19. ProxySQL实现Mysql读写分离 - 部署手册
  20. Java连接postgreSQL数据库,找不到表。

热门文章

  1. centos7下源码方式安装gitlab8.9+发送邮件+ldap
  2. Golang - 异常处理
  3. Selenium调用JavaScript修改元素属性
  4. NodeJS的安装与使用
  5. 洛谷 P1595 信封问题
  6. 小记——Grub Rescue恢复
  7. mongodb--作为windows服务启动
  8. 洛谷 P1649 [USACO07OCT]障碍路线Obstacle Course
  9. Shell、Xterm、Gnome-Terminal、Konsole简介(转)
  10. [Javascript] Deep Search nested tag element in DOM tree