SQL server2005基本sql语句 常用的内置函数、聚合函数的使用详解

Posted by

一、基本概念

                          实体完整性约束
  约束种类                                      功能描述
  PRIMARY KEY(主键)约束                        
唯一识别每一条记录的标志,可以有多列共同组成
  IDENTITY(自增)约束                           
列值自增,一般使用此属性设置的列作为主键
  UNIQUE(唯一)约束                             
可以使用UNIQUE约束确保在非主键列中不存在重复值,但列值可以是NULL(空)
  
  
                     域完整性约束
  CHECK(检查)约束                                用于限制列中值得范围
  FOREIGN KEY(外键)                              一个表中的FORENIGN KEY
指向另一个表中的PRIMARY KEY
  DEFAULT(默认值)约束                            用于向列中插入默认值
  NOT NULL(非空)约束                            
用于强制列不接受NULL(空)值
  
  
  
注意:
1、PRIMARY
KEY用于将表中的某类设置为主键,一张表中只有一个主键,主键可以是一列或由多列组成。
2、NOT NULL是对列值进行限制,即在表中添加数据时不允许有NULL值。
3、CHECK约束的语法规则:CHECK(表达式)
外键的使用:字段名 数据类型 [FOREIGN KEY] REFERENCES 表名(字段名)
  
向数据库中添加值:
语法:INSERT [INTO] table_name [(COLUMN1,COLUMN2,…..)] VALUES
(VALUE1,VALUE2,…..)
注意:
1、VALUES需要与COLUMN对应
2、添加数据时,如果字段类型为varchar或datetime,否则必须使用单引号(”)引起来。
3、虽然没有显示地添加IDENTIRY约束字段,但是数据库会自动按照IDENTITY规则添加数据

  1.数据库:

  数据库(DataBase)就是一个存储数据的仓库,为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。数据库是数据管理软件。数据存储分为三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。

一次添加多行数据
语法:
INSERT [INTO] tabale_name([COLUMN1,COLUMN2,…..])
SELECT VALUE UNION
SELECT VALUE

  2.数据库范式:

  数据库范式即数据库应该遵循的规则。目前关系数据库最常用的四种范式分别是:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BCN范式(BCNF)。

  第一范式:无重复的域。即数据库表的每一列都是不可分割的原子数据项,而不是集合、数组、记录等非原子数据项。

  第二范式:数据库表中的所有列都必须依赖于主键,这意味着一个表只描述一件事情。

  第三范式:表中的每一列只与主键直接相关而不是间接相关。

  BCN范式:Boyce-Codd,不允许出现有主键的一部分被主键另一部分或者其他部分决定。即一个表中只能有一个主键。

  举例(摘自其他博客)说明BCN:

  假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID,
数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:

    (仓库ID, 存储物品ID) →(管理员ID, 数量)

    (管理员ID, 存储物品ID) → (仓库ID, 数量)

  所以,(仓库ID, 存储物品ID)和(管理员ID,
存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:

    (仓库ID) → (管理员ID)

    (管理员ID) → (仓库ID)

  即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。

删除表中的数据
语法:DELECT FROM table_name[WHERE <表达式>]
注意:
1、使用DELETE语句删除数据时,是以整条记录为单位的,不能只删除某个字段
删除整张表数据
语法:TRUNCATE TABLE table_name
                                  
           两种删除语句的优缺点
   语句                     优点                                       
缺点
   DELETE                   选择性地删除,数据可恢复                   
当删除整张表的数据时效率低
   TRUNCATE                 只能删除整张表的数据,但是效率高于         
不能选择性地删除,数据可恢复
                            DELETE语句

  3.数据库系统和数据库管理系统:

  数据库系统由数据库、数据库管理系统、应用开发工具构成。

  数据库管理系统(DataBase Management System,
DBMS)是用来定义、管理和维护数据的软件。它是数据库系统的重要组成部分。数据库管理系统通过SQL语言来管理数据库中的数据。

修改表中的数据
语法:UPDATE table_name SET COLUMN1={},COLUMN2={},….
WHERE<表达式>

  4.SQL语言:

  SQL(Structured Query Language)语言的全称是结构化查询语言。它包括:

    - 数据库定义语言(Data Definition Language, DDL)

    - 数据操作语言(Data Manipulation Language, DML)

    - 数据控制语言(Data Control Language, DCL)

注意:分离数据库是将数据库文件从SQL
Server中分离出来,而删除数据库是将数据库文件删除。

  5.MySQL数据库版本和优势:

查询语句语法结构
语法:SELECT <COLUMN1,COLUMN2,…..> FROM <table_name>
[表达式] [ORDER BY <COLUMN1,COLUMN2,…..> [ASC或DESC]]
ORDER BY
子句用于对查询结果进行排序。ASC表示升序,DESC表示降序排列,默认的排序是ASC.
注意:将查询得到的结果称为结果集(RecordSet).SQL
Server对大小写不敏感,包括关键字在内。例如,SELECT、select和Select是等效的。

  常见数据库

  商业数据库:甲骨文的Oracle、IBM的DB2、微软的Access和SQL
Server。开源数据库:PostgreSQL、MySQL。

使用别名
1、语法:SELECT 字段名1 别名,字段名2 别名 FROM 表名
2、语法:SELECT 别名=字段名1,别名=字段名2 FROM
3、语法:SELECT 字段名1 AS 别名,字段名2 AS 别名 FROM 表名
注意:使用“=”更改查询结果列名时比较特殊,在SELECT语句中语法必须是“别名=字段名”;

  版本分类

  根据操作系统:Windows版,UNIX版,Linux版,MacOS版;根据开发情况:Alpha、Beta、Gamma与Available(GA)。

  alpha
暗示这是一个以展示新特性为目的的版本,存在比较多的不稳定因素,还会向代码中添加新新特性

  beta
以后的beta版、发布版或产品发布中,所有API、外部可视结构和SQL命令列均不再更改,不再向代码中添加影响代码稳定性的新特性。Gamma比Beta版更高级。

  GA如果没有后缀,则暗示这是一个大多数情况下可用版本或者是产品版本。.
GA releases则是稳定版。

  优势:MySQL开放源码、跨平台性、价格优势、功能强大且使用方便。

单列排序:SELECT * FROM table_name ORDER BY
多列排序;SELECT * FROM table_name ORDER BY COLUMN1 DESC,COLUMN2
DESC….

  Linux安装MySQL

  

查询限定行TOP N
语法:SELECT TOP N <COLUMN1,COLUMN2,…..> FROM
<table_name> [WHERE <表达式>] [ORDER BY
<COLUMN1,COLUMN2,…..> [ASC或DESC]]
查询百分比
语法:SELECT TOP N PERCENT <COLUMN1,COLUMN2,…..> FROM
<table_name> [WHERE <表达式>] [ORDER BY
<COLUMN1,COLUMN2,…..> [ASC或DESC]]

二、MySQL数据类型(摘自菜鸟教程:

  MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

条件查询注意:
1、在一个WHERE子句中,可以同时使用多个AND运算符链接多个查询条件。
2、在“(表达式1)OR(表达式2)”中,如果表达式1为TRUE,将不再执行表达式2。

  1.整数类型的存储和范围

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4 字节 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度
浮点数值
DOUBLE 8 字节 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度
浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

 

  2.日期和时间类型

类型 大小 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 ‘-838:59:59’/’838:59:59’ HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4

1970-01-01 00:00:00/2038

结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

YYYYMMDD HHMMSS 混合日期和时间值,时间戳

SQL Server内置函数(内置函数可作为where条件,聚合函数不能做为where条件)

  3.字符串类型

类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 变长字符串
TINYTEXT 0-255字节 短文本字符串
TEXT 0-65 535字节 长文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据
TINYBLOB  0-255字节  不超过 255 个字符的二进制字符串
BLOB 0-65 535字节 二进制形式的长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据

                                      字符串函数
  函数名                      
示例                                          函数功能
  CharIndex                 
CharIndex(‘ab’,’cdab’)结果返回3                
返回‘ab’在‘cdab’中的位置,将返回第一个字母的位置
  Len                       
Len(‘adc’)结果返回3                             返回字符串的长度
   Upper                     
Upper(‘abc’)结果ABC                            
将字符串中的小写字母转换为大写
  Ltrim                      Ltrim(‘ 
adc’)结果返回adc                       清楚左边空格
  Rtrim                      Rtrim(‘abc 
‘)结果返回abc                       清除右边空格
  Replace                   
Replace(‘abb’,’b’,’z’)结果返回azz               替换指定的字符
  Stuff                     
Stuff(‘abcd’,1,2,’mm’)结果返回mmcd              替换指定范围的字符
  substring                 
substring(‘abc’,’2′,’2′)结果返回bc              从指定位置截取
  
实例:测试字符串长度SELECT Len(字段名) FROM table_name
将内置函数作为条件使用:SELECT * FROM table_name WHERE
 Len(字段名)>VALUE

三、MySQL表操作

                                    日期函数
        函数名                 
示例                                                  函数功能
        GetDate                
GetDate结果返回“当前日期”                             返回当前日期
        DateAdd                
DateAdd(mm,2,’2009-10-08′)结果返回‘2009-12-08’       
向日期指定部分添加数字,其中,yy表示年、mm表示月、dd表示日
  DateDiff               
DateDiff(dd,’2009-09-09′,’2010-09-09′)结果返回‘365’  
返回两个日期之间的间隔,其中,yy表示年、mm表示月、dd表示日
  DateName               
DateName(DW,’2009-09-09′)结果返回“星期三”            
以字符串的形式返回某个日期指定的部分
  DatePart               
DatePart(DW,’2009-09-09′)结果返回“4”                 
以整数形式返回某个日期指定的部分
  
实例:获取系统当前日期函数为GetDate(),表达式可以写为“COLUMN1<GetDate()”,SQL语句如下:
SELECT * FROM table_name WHERE COLUMN1<GetDate()

  1.插入数据 INSERT INTO

-- 插入一条新的数据
/* INSERT INTO customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email) VALUES('10006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL); */
-- 按表列字段的顺序插入数据时,列字段可省略
INSERT INTO customers VALUES('10006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL);
-- 将一张表插入到原来的表
/* INSERT INTO customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)  SELECT cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email FROM cust_new WHERE cust_id NOT IN (SELECT cust_id FROM customers); */
-- 复制表
CREATE TABLE custcopy AS SELECT * FROM customers;

  注意:

  - 任何SELECT选项和子句都可以使用,包括WHERE和GROUP BY。

  - 可以联结多个表执行插入数据操作。

  - 不管从多少个表中检索数据,数据都只能插入到单个表中。

判断选课时间是否是星期三的函数为DateName(DW,COLUMN),表达式可以写成“DateName(DW,COLUMN)=‘星期三’”,SQL语句如下:
SELECT * FROM table_name DateName(DW,COLUMN)=‘星期三’

  2.更新和删除数据 UPDARE DEL

  UPDATE可以:更新表中特定行,更新表中所有行。在没有where子句时,UPDATE会更新所有记录。

-- UPDATE总以要更新的表的名字开始,以SET指明一个或多个要更新的字段,以WHERE指定要更新的记录
UPDATE customers SET cust_email = 'kim@thetoystore.com' WHERE cust_id = '10005';
UPDATE customers SET cust_contact = 'Sam Roberts', cust_email = 'sam@toyloand.com' WHERE cust_id = '10006';
-- 设置NULL来删除某个列的值
UPDATE customers SET cust_email = NULL WHERE cust_id = '10005';

-- DELETE是删除列
DELETE FROM customers WHERE cust_id = '10006';

  DELETE用于按行删除记录,它本身不会修改表结构。

  注:在对UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,以保证它过滤的是确实要删除的记录。

                                    数学函数
  函数名                 
示例                                                   函数功能
   Abs                    
Abs(-1)结果返回“1”                                     求绝对值
  Ceiling                
Ceiling(24.1)结果返回“25”                             
大于24.1的最小整数     
  Floor                  
Floor(24.1)结果返回“24”                               
小于24.1的最大整数
  Power                  
Power(2,3)结果返回“8”                                  计算2的3次方
  Round                  
Round(748.32,1)结果返回“748.30”                       
返回一个数值,舍入到指定的长度或精度
  Sign                   
Sign(100)结果返回“1”                                  
正整数返回1,负整数返回-1
  Sqrt                   
Sqrt(4)结果返回“2”                                     开平方

   3.创建表及约束条件

                                  系统函数
  函数名                     
示例                                                 函数功能
        Convert                
Convert(varchar(10),123)结果返回“123”                   装换数据类型
  DataLength             
DataLength(’12中国’)结果返回6                          
返回任何数据类型的字节数。“中国”包含4个字节,“12”包含两个字节,所以返回6.
 

  1.创建表

-- 创建表语法:CREATE TABLE [IF NOT EXISTS] table_name(column_name data_type,...);
CREATE TABLE users(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), salary FLOAT(8,2) UNSIGNED);
-- 查看表结构
DESC users;
SHOW COLUMNS FROM users;
SHOW CREATE TABLE users;

开发过程中对于日期的操作:例如获得昨天、前天的数据。
SQL语句如下: select * from table_name where pudoctime>=SUBSTRING(
Convert(varchar(20),DateAdd(DD,-1,GETDATE()),120),1,10)

  2.约束条件

  约束是为了保证数据的完整性和一致性,约束类型包括:

 键名  类型
PRIMARY KEY 主键约束
UNIQUE KEY 唯一约束
NOT NULL 非空约束
UNSIGNED 无符号约束
DEFAULT 默认约束
FOREIGN KEY 外键约束

 

 
模糊查询
在SQL
Server中,通过使用通配符来实现LIKE运算,通配符“%”,“_”,“[]”。
注意:只有char、varchar和text类型的数据才能使用LIKE运算符和通配符。

  4.修改表结构

1、“%”通配符:表示任意字符的匹配,且不计字符的多少。
(1)开头、结尾匹配
开头匹配(以字母“c”开头的所有数据):SELECT * FROM table_name WHERE
COLUMN LIKE ‘c%’
结尾匹配(以字母“c”结尾的所有数据):SELECT * FROM table_name WHERE
COLUMN LIKE ‘%c’

  1.添加和删除列

-- 修改数据表
-- 添加列语法: ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST|AFTER col_name]
ALTER TABLE users ADD age TINYINT UNSIGNED NOT NULL DEFAULT 10 AFTER name;
-- 删除列语法: ALTER TABLE tbl_name DROP [COLUMN] col_name
ALTER TABLE users DROP age;
-- 混合操作
ALTER TABLE users ADD gender VARCHAR(10) NOT NULL DEFAULT "male", ADD address VARCHAR(32) NOT NULL,DROP salary;

(2)中间匹配
以“c”开头,以“b”结尾的所有数据:SELECT * FROM table_name WHERE COLUMN
LIKE ‘c%b’

  2.修改列定义和列名

-- 修改列名,要重新声明列的数据类型和约束条件
ALTER TABLE users CHANGE name username varchar(10) NOT NULL;
-- 修改列定义
ALTER TABLE users MODIFY id SMALLINT NOT NULL FIRST;
-- 修改表名
ALTER TABLE users RENAME TO tb;

 

(3)两端匹配
查询出包含字母“c”的所有数据:SELECT * FROM table_name WHERE COLUMN
LIKE ‘%c%’

四、MySQL查询操作

注意:“%”匹配一个或多个字符。

  1、查询数据

2、”_“通配符:”_“统配符的功能与”%“基本相同,只是它仅表示任意一个字符(区别)的匹配。若需要表示两个字符的匹配,则使用两个”_“通配符,即写成”_
_“。
(1)匹配一个字符
示例:从表中查询名称(name)为”t_fu“(“_”代表任意一个字符)的所有数据,SQL语句如下:
SELECT * FROM table_name where name LIKE ‘t_fu’    
匹配字符串有(tafu,tbfu,tcfu…..)

  1.查询关键字 SELECT FROM

-- 查询单列
SELECT prod_name FROM products;
-- 查询多列
SELECT prod_id, prod_name, prod_price FROM products;
-- 查询所有列
SELECT * FROM products;

(2)匹配多个字符
查询名称(name)为3个字符的数据SQL语句如下:
SELECT * FROM table_name where name LIKE ‘_ _ _’
注意:”_”只能匹配一个字符。

  2.排序关键字 ORDER BY

  查询的数据如果不排序,一般是以它在底层表中出现的顺序显示。如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义。

-- 单排
SELECT prod_name FROM products ORDER BY prod_name;
-- 多排
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price, prod_name;
-- 按列位置排
SELECT prod_id, prod_price, prod_name FROM products ORDER BY 2, 3; 注,它只能根据已选择字段的相对位置排序
-- 指定排序方向
SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name;

(3)”_”与”%”的综合应用
在模糊查询过程中,经常需要”_”和”%”一起使用才能完成查询功能。
示例:查询名称(name)第二个字母为”c”的所有数据,SQL语句如下:
SELECT * FROM table_name where name LIKE ‘_c%’

  3.过滤关键字 where + 操作符

  where子句操作符表:

 操作符  说明
 =  等于
 <>  不等于
 !=  不等于
 <  小于
 <=  小于等于
 !<  不小于
 >  大于
 >=  大于等于
 !>  不大于
BETWEEN 在指定的两个值之间
IS NULL 为null值
AND、OR、NOT、IN 组合查询
LIKE 通配符过滤

  用例:

-- 匹配查询
SELECT prod_price, prod_name FROM products where prod_price = 3.49;
-- 不匹配查询
SELECT prod_price, prod_name FROM products where prod_price <> 10;
-- 范围查询
SELECT prod_price, prod_name FROM products where prod_price BETWEEN 5 AND 10; 
-- 空值查询
SELECT prod_name FROM products where prod_price IS NULL;
-- 组合查询AND
SELECT prod_id, prod_name, prod_price FROM products WHERE vend_id='DLL01' AND prod_price <= 4;
-- 组合查询OR
SELECT prod_name, prod_price FROM products WHERE vend_id='DLL01' OR vend_id = 'BRS01';
-- 组合查询AND和OR
SELECT prod_name, prod_price FROM products WHERE vend_id='DLL01' OR vend_id = 'BRS01' AND prod_price <= 4;
-- 组合查询IN
SELECT prod_name, prod_price FROM products WHERE vend_id IN ('DLL01', 'BRS01') ORDER BY prod_name;
-- 组合查询NOT
SELECT prod_name, prod_price FROM products WHERE vend_id NOT vend_id='DLL01';
-- 通配符过滤
SELECT prod_name FROM products WHERE prod_name LIKE '%TNT%';

3、”[]”通配符:”[]”通配符用于指定一系列的字符,只要满足这些字符其中之一且出现在”[]”通配符的位置的字符串就满足查询条件
(1)、各种通配符可以组合使用,必须自习分析它所表示的匹配条件
       
                                  匹配条件列表
   查询条件                                                     
匹配条件
   LIKE ‘5[%]’                                                    
5%
   LIKE ‘[_]n’                                                    
_n
   LIKE
‘[a-f]’                        a,b,c,d,e,f
   LIKE ‘[[]’                                                      
[
   LIKE ‘[]]’                                                      
]
   LIKE ‘abc[def]’                                            
abcd,abce,abcf
   LIKE ‘abc[_]d%’                                            
adbc_d…(省略号表示可以有任意字符)
   LIKE ‘a[^a]d%’                                             
不能为aad…([^]表示不能取[]内的字符)
   
示例:
查询名称(name)中包含”_”的所有数据:SELECT * FROM table_name WHERE name
LIKE ‘%[_]%’
查询名称(name)中最后一个字符为”a”,”b”,”f”,”g”的所有数据:SELECT * FROM
table_name WHERE name LIKE ‘%[a,b,f,g]’
查询名称(name)中最后一个字符不为”a”,”b”,”f”,”g”的所有数据:SELECT *
FROM table_name WHERE name LIKE ‘%[^a,b,f,g]’

   2、数据处理函数

IN运算符
若只需要满足多个条件中的一个查询条件,则可以使用IN运算符。IN运算符允许根据一行记录中是否有一列包括在一系列值之中而选择改行。
所有的条件罗列在IN运算符之后,并以园括号括起来,各个条件之间使用逗号分开。
示例:
查询ID为1、3或4的数据:SELECT * FROM table_name WHERE ID IN (1,3,4)
注意:
在大多数情况下,OR运算符与IN运算符可以实现相同的功能。
示例:SELECT * FROM talbe_name WHERE ID=1 OR ID=3 OR ID=4

  1.文本处理函数

 函数 说明
 LEFT 返回字符串左边的字符
 LENGTH 返回字符串的长度
 LOWER  返回字符串的小写
 LTRIM 去掉字符串左边的空格
 RIGHT 返回字符串右边的字符
 RTRIM 去掉字符串右边的空格
UPPER 返回字符串的大写

   - 用例: 

SELECT vend_name, UPPER(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name;

二者的结果完全一致,都是返回多条数据记录。但是,与OR运算符相比,IN运算符具有以下两个优点:
(1)当选择条件很多时,采用IN运算符将十分简捷,只需要在括号中用逗号间隔后一次罗列即可,运行效率高于OR运算符。
(2)IN运算符后面所列的条件可以是另一条SELECT语句,即子查询。

  2.日期和时间处理函数

  注:日期和时间函数根据

 函数  说明
 NOW()、SYSDATE()、CURRENT_TIMESTAMP、LOCALTIME、LOCALTIMESTAMP 获取当前日期和时间
 CURDATE(), CURRENT_DATE 获取当前日期
 CURTIME(), CURRENT_TIME 获取当前时间
 DATE、YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND、MICROSECOND 获取指定日期和时间的日期、年、季度、月、周、日、小时、分钟、秒、毫秒数
 WEEKOFYEAR、DAYOFYEAR、DAYOFMONTH、DAYOFWEEK、LAST_DAY 获取指定日期和时间的年周索引、年天索引、月天索引、周天索引,最后一天的日期
MONTHNAME、 DAYNAME 获取指定日期和时间的英文月名、英文天名
DATE_ADD、DATE_SUB 指定日期按指定参数进行加减运算
PERIOD_ADD、PERIOD_DIFF 指定日期加、减多少个月
TIMEDIFF 指定日期和时间相差多少个时间
TIMESTAMPDIFF 指定日期/时间或日期时间的差值
TO_DAYS、FROM_DAYS 日期和月数的相互转换函数
TIME_TO_SEC、SEC_TO_TIME 时间和秒数的相互转换函数
STR_TO_DATE、DATE_FORMAT 字符串/日期时间格式转换成新的格式
TIME_FORMAT 时间格式转换你成新的格式
MAKEDATE、MAKETIME 拼凑日期/时间
UNIX_TIMESTAMP、FROM_UNIXTIME 日期时间和unix时间戳的相互转化

   用例:

-- 获取当前日期和时间,日期指的是年月日,时间指的是时分秒
SELECT NOW(), SYSDATE(), CURRENT_TIMESTAMP, LOCALTIME, LOCALTIMESTAMP;
-- 分别获取当前日期和时间
SELECT CURDATE(), CURRENT_DATE, CURTIME(), CURRENT_TIME;
-- 分别获取日期时间、年、季度、月、周、日、时、分、秒
SELECT DATE(SYSDATE()), YEAR(SYSDATE()), QUARTER(SYSDATE()), MONTH(SYSDATE()), WEEK(SYSDATE()), DAY(SYSDATE()), HOUR(SYSDATE()), MINUTE(SYSDATE()), SECOND(SYSDATE()), MICROSECOND(SYSDATE());
-- 获取指定索引
SELECT WEEKOFYEAR(SYSDATE()), DAYOFYEAR(SYSDATE()), DAYOFMONTH(SYSDATE()), DAYOFWEEK(SYSDATE()), LAST_DAY(SYSDATE());
-- 获取月和周的英文名称
SELECT MONTHNAME(SYSDATE()), DAYNAME(SYSDATE());

-- DATE加,第一个参数是指定的日期和时间,第二个参数是间隔和单位
SELECT DATE_ADD(now(), INTERVAL 1 YEAR), DATE_ADD(now(), INTERVAL 2 MONTH), DATE_ADD(now(), INTERVAL 1000 SECOND);
-- DATE减,与DATE加参数相同
SELECT DATE_SUB(now(), INTERVAL 1 YEAR), DATE_SUB(now(), INTERVAL 2 MONTH), DATE_SUB(now(), INTERVAL 1000 SECOND);
-- 日期的加减运算
SELECT PERIOD_ADD(201808, 2), PERIOD_ADD(1808, 2),PERIOD_ADD(DATE_FORMAT(SYSDATE(), '%Y%m'), 2), PERIOD_DIFF(201808, 201004), PERIOD_DIFF(1808, 1004); 
-- 时间差计算
SELECT TIMEDIFF('2018-08-06', '2018-08-5');-- 不支持日期
SELECT TIMEDIFF('19:00:00', '17:00:00'), TIMEDIFF('2018-08-6 9:30:30', '2018-08-5 17:00:00');
-- 更便捷的日期/时间差值计算,第一个参数是要计算的字段,其值为第三个日期时间减去第二个日期时间
SELECT TIMESTAMPDIFF(DAY, '2018-08-5 17:00:00', '2018-08-8 9:30:30'), TIMESTAMPDIFF(DAY, '2018-08-5', '2018-08-8');
SELECT TIMESTAMPDIFF(SECOND, '17:00:00', '19:30:30');-- 不支持单独时间计算
-- 日期和天数的相互转换
SELECT TO_DAYS(SYSDATE()), TO_DAYS('2018-8-8'), FROM_DAYS(737279);
-- 时间和秒数的相互转换
SELECT TIME_TO_SEC(SYSDATE()), TIME_TO_SEC('12:00:00'), SEC_TO_TIME(43200);
-- 字符串格式化;字符串格式化成日期只能要按照字符串的写法改写成标准日期时间字符串
SELECT STR_TO_DATE('2018.08.6 9:30:30', '%Y.%m.%d %H:%i:%s');
-- 日期时间字符串可以随便更改或获取字段
SELECT DATE_FORMAT('2018-08-06 09:30:30', '%Y%m');-- 获取年月的组合字符串
SELECT DATE_FORMAT('2018-08-06 09:30:30', '%H%i%s');-- 获取时分秒的组合字符串
SELECT DATE_FORMAT(SYSDATE(), '%Y年%m月%d日 %H时哈哈%i分嘿嘿%d秒呵呵');-- 重新格式化
-- 时间格式化只能格式化时间
SELECT TIME_FORMAT('2018-08-06 09:30:30', '%Y年%m月%d日 %H时%i分%d秒');
-- 只对'09:30:30'进行格式化,日期全部为00
SELECT TIME_FORMAT('09:30:30', '%H时%i分%d秒');
-- MAKEDATE根据数字组合成日期(以天数换算),MAKETIME根据数字组合成时间
SELECT MAKEDATE(2018, 9);-- 结果是'2018-01-09'而不是'2018-09-01'
SELECT MAKEDATE(2018, 220);-- 结果是'2018-08-08'
SELECT MAKETIME(19,30,30);-- 与日期相反,支持三个参数拼接而不支持两个参数换算
-- 日期时间和unix时间的相互转换
SELECT UNIX_TIMESTAMP(), FROM_UNIXTIME(UNIX_TIMESTAMP());

BETWEEN运算符
在WHERE子句中,可以采用BETWEEN运算符在两个值之间进行比较筛选。
1、用于数字类型数据比较
查询年龄(age)在6~10之前的数据:SELECT * FROM table_name WHERE age
BETWEEN 6 AND 10
2、用于时间日期比较
查询日期(bridate)在”1952-01-01″到”1954-01-01″之间的数据:SELECT * FROM
table_name WHERE bridate BETWEEN ‘1952-01-01’ AND ‘1954-01-01’
注意:BETWEEN运算符筛选包含头和尾。例如数字类型比较,数据会包含6和10

  3.数值处理函数

函数  说明
ABS() 返回数字表达式的绝对值。
ACOS() 返回数字表达式的反余弦值。如果值是不在范围-1到1,则返回NULL。
ASIN() 返回数字表达式的反正弦。返回NULL,如果值不在范围-1到1
ATAN() 返回数字表达式的反正切。
ATAN2() 返回传递给它的两个变量的反正切。
BIT_AND() 返回按位AND运算表达中的所有位。
BIT_COUNT() 返回传递给它的二进制值的字符串表示。
BIT_OR() 返回传递表达的所有位的位或。
CEIL() 返回最小的整数值但不能比传递的数字表达式小
CEILING() 返回最小的整数值但不能比传递的数字表达式小
CONV() 表达式从一个基数到另一个基数转换的数字。
COS() 返回传递数字表达式的余弦值。数字表达式应该用弧度表示。
COT() 返回传递数字表达式的余切。
DEGREES() 返回数字表达式从弧度转换为度。
EXP() 返回数值表达式的自然对数(E)为基数的幂。
FLOOR() 返回最大整数值但不能大于通过表达式数值。
FORMAT() 返回数字表达式舍入到小数位数。
GREATEST() 返回输入表达式的最大值。
INTERVAL() 需要多个表达式exp1, exp2和exp3等..如果为exp1小于exp2返回0,如果为exp1小于exp3返回1等。
LEAST() 给两个或两个以上时,返回所有输入的最小值。
LOG() 返回通过数字表达式的自然对数。
LOG10() 返回传递表达的基数为10对数的数值。
MOD() 返回表达式由另一个表达式除以剩余部分。
OCT() 返回通过数字表达式的八进制值的字符串表示。如果传递值为NULL,返回NULL。
PI() 返回圆周率的值
POW() 返回一个表达式到另一个表达的次方值
POWER() 返回一个表达式到另一个表达的次方值
RADIANS() 返回传递表达从度转换为弧度值
ROUND() 返回数字表达式四舍五入到整数。可用于舍入表达式为小数点数值
SIN() 返回给定的数字表达的正弦值(弧度)
SQRT() 返回数字表达式的非负平方根
STD() 返回数字表达式的标准偏差
STDDEV() 返回数字表达式的标准偏差
TAN() 返回以弧度表示数值表达式的正切值。
TRUNCATE() 返回exp1小数位数字截断到exp2。如果exp2为0,则结果将没有小数点。

 

相关文章

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注