SQL语法(二)

xiaoxiao2021-02-28  63

TOP 子句

TOP 子句

TOP 子句用于规定要返回的记录的数目。

对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。

注释:并非所有的数据库系统都支持 TOP 子句。

 

 

 

LIKE 操作符

用于数据库的模糊查询数据

 

"a%" 查询以a开头的数据

SELECT * FROM w_wzx WHERE w_name LIKE "a%"

 

 "%f"f结尾

SELECT * FROM w_wzx WHERE w_name LIKE "%f"

 

"%f%" 包含f

SELECT * FROM w_wzx WHERE w_name LIKE "%f%"

 

 

IN 操作符

in表示查询的数据在某个元素里面

SELECT * FROM w_wzx WHERE w_name IN ("dff","as")

 

BETWEEN 操作符

Between表示查询的数据在某两个数据之间

 

Id35之间

SELECT * FROM w_wzx WHERE id BETWEEN 3 AND 5

 

重要事项:不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。某些数据库会列出介于 "Adams" 和 "Carter" 之间的人,但不包括 "Adams" 和 "Carter" ;某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人;而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人,包括 "Adams" ,但不包括 "Carter" 。

所以,请检查你的数据库是如何处理 BETWEEN....AND 操作符的!

Alias(别名)

将数据库名称或者某个字段设置其他名称

 

将表名为w_wzx设置为 w

SELECT w.w_age FROM w_wzx  AS w where id = 2;

 

 

将表字段w_name 设置为 name  w_sex 设置为sex

SELECT w_name AS name, w_sex AS sex FROM w_wzx

 

JOIN

用于连接表字段之间的关系

有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join

数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。

 

· JOIN: 如果表中有至少一个匹配,则返回行

· LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

· RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

· FULL JOIN: 只要其中一个表中存在匹配,就返回行

 

 

 INNER JOIN 关键字

INNER JOIN 关键字语法

SELECT column_name(s)

FROM table_name1

INNER JOIN table_name2

ON table_name1.column_name=table_name2.column_name

注释:INNER JOIN 与 JOIN 是相同的。

 

 

 

SELECT w_wzx.w_name , w_wkn.w_name

FROM w_wzx INNER JOIN w_wkn

ON w_wzx.id = w_wkn.id

 

 

1on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

 

2where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

 

LEFT JOIN 关键字

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

 

 

 

 

LEFT JOIN 关键字语法

SELECT column_name(s)

FROM table_name1

LEFT JOIN table_name2

ON table_name1.column_name=table_name2.column_name

注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。

 

 

SELECT w_wzx.w_name , w_wkn.w_name

FROM w_wzx LEFT JOIN w_wkn

on w_wzx.id = w_wkn.id

 

 

 

 

 

 

 

 

RIGHT JOIN 关键字

 

RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

RIGHT JOIN 关键字语法

SELECT column_name(s)

FROM table_name1

RIGHT JOIN table_name2

ON table_name1.column_name=table_name2.column_name

注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。

 

SELECT w_wzx.w_name , w_wkn.w_name

FROM w_wzx RIGHT  JOIN w_wkn

on w_wzx.id = w_wkn.id

 

 

 

 

 

FULL JOIN 关键字语法

只要其中某个表存在匹配,FULL JOIN 关键字就会返回行

SELECT column_name(s)

FROM table_name1

FULL JOIN table_name2

ON table_name1.column_name=table_name2.column_name

注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。

 

SELECT w_wzx.w_name , w_wkn.w_name

FROM w_wzx FULL  JOIN w_wkn

on w_wzx.id = w_wkn.id

 

 

 

 UNION 和 UNION ALL 操作符

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

SQL UNION 语法

SELECT column_name(s) FROM table_name1

UNION

SELECT column_name(s) FROM table_name2

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

SQL UNION ALL 语法

SELECT column_name(s) FROM table_name1

UNION ALL

SELECT column_name(s) FROM table_name2

另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

 

 

 CREATE DATABASE 语句

CREATE DATABASE 用于创建数据库。

CREATE DATABASE dffd

 

 CREATE TABLE 语句

CREATE TABLE 语句用于创建数据库中的表。

SQL CREATE TABLE 语法

CREATE TABLE 表名称

(

列名称1 数据类型,

列名称2 数据类型,

列名称3 数据类型,

....

)

数据类型(data_type)规定了列可容纳何种数据类型。下面的表格包含了SQL中最常用的数据类型:

CREATE TABLE Persons

(

Id_P int,

LastName varchar(255),

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

SQL 约束

约束用于限制加入表的数据的类型。

可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。

我们将主要探讨以下几种约束:

 

1NOT NULL    设置的字段不为空

· 

:2UNIQUE   

UNIQUE 约束唯一标识数据库表中的每条记录。

UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

PRIMARY KEY 拥有自动定义的 UNIQUE 约束。

请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

 

3PRIMARY KEY

PRIMARY KEY 约束唯一标识数据库表中的每条记录。

主键必须包含唯一的值。

主键列不能包含 NULL 值。

每个表都应该有一个主键,并且每个表只能有一个主键。

 

4FOREIGN KEY

一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。

让我们通过一个例子来解释外键。请看下面两个表:

 

5CHECK

CHECK 约束用于限制列中的值的范围。

如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

 

6DEFAULT

DEFAULT 约束用于向列中插入默认值。

如果没有规定其他的值,那么会将默认值添加到所有的新记录

CREATE INDEX 语句

CREATE INDEX 语句用于在表中创建索引。

在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据

 

您可以在表中创建索引,以便更加快速高效地查询数据。

用户无法看到索引,它们只能被用来加速搜索/查询。

注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

一,数学函数

   数学函数主要用于处理数字,包括整型、浮点数等。 函数作用ABS(x)

返回x的绝对值SELECT ABS(-1) -- 返回1

CEIL(x),CEILING(x)

返回大于或等于x的最小整数  SELECT CEIL(1.5) -- 返回2

FLOOR(x)

返回小于或等于x的最大整数SELECT FLOOR(1.5) -- 返回1

RAND()

返回0->1的随机数SELECT RAND() --0.93099315644334

RAND(x)

返回0->1的随机数,x值相同时返回的随机数相同SELECT RAND(2) --1.5865798029924

SIGN(x)

返回x的符号,x是负数、0、正数分别返回-1、0和1SELECT SIGN(-10) -- (-1)

PI()

返回圆周率(3.141593)  SELECT PI() --3.141593

TRUNCATE(x,y)

返回数值x保留到小数点后y位的值(与ROUND最大的区别是不会进行四舍五入)  SELECT TRUNCATE(1.23456,3) -- 1.234

ROUND(x)返回离x最近的整数  SELECT ROUND(1.23456) --1ROUND(x,y)

保留x小数点后y位的值,但截断时要进行四舍五入  SELECT ROUND(1.23456,3) -- 1.235

POW(x,y).POWER(x,y)

返回x的y次方  SELECT POW(2,3) -- 8

SQRT(x)

返回x的平方根  SELECT SQRT(25) -- 5


二,字符串函数 字符串函数是MySQL中最常用的一类函数,字符串函数主要用于处理表中的字符串。 函数说明CHAR_LENGTH(s)

返回字符串s的字符数

SELECT CHAR_LENGTH('你好123') -- 5

LENGTH(s)

返回字符串s的长度   UTF8下面一个汉字占三个字节

SELECT LENGTH('你好123') -- 9

CONCAT(s1,s2,...)

将字符串s1,s2等多个字符串合并为一个字符串

SELECT CONCAT('12','34') -- 1234

CONCAT_WS(x,s1,s2,...)

同CONCAT(s1,s2,...)函数,但是每个字符串直接要加上x

SELECT CONCAT_WS('@','12','34') -- 12@34

UPPER(s),UCAASE(S)

将字符串s的所有字母变成大写字母

SELECT UPPER('abc') -- ABC

LOWER(s),LCASE(s)

将字符串s的所有字母变成小写字母

SELECT LOWER('ABC') -- abc

LEFT(s,n)

返回字符串s的前n个字符

SELECT LEFT('abcde',2) -- ab

RIGHT(s,n)

返回字符串s的后n个字符

SELECT RIGHT('abcde',2) -- de

LTRIM(s)去掉字符串s开始处的空格RTRIM(s)去掉字符串s结尾处的空格TRIM(s)去掉字符串s开始和结尾处的空格REPLACE(s,s1,s2)

将字符串s2替代字符串s中的字符串s1

SELECT REPLACE('abc','a','x') --xbc

SUBSTRING(s,n,len)获取从字符串s中的第n个位置开始长度为len的字符串MID(s,n,len)同SUBSTRING(s,n,len)REVERSE(s)

将字符串s的顺序反过来

SELECT REVERSE('abc') -- cba


三,日期函数   MySQL的日期和时间函数主要用于处理日期时间。 函数说明CURDATE(),CURRENT_DATE()

返回当前日期

SELECT CURDATE()->2014-12-17

CURTIME(),CURRENT_TIME

返回当前时间

SELECT CURTIME()->15:59:02

NOW(),CURRENT_TIMESTAMP(),LOCALTIME(),

SYSDATE(),LOCALTIMESTAMP()

返回当前日期和时间

SELECT NOW()->2014-12-17 15:59:02

UNIX_TIMESTAMP()

以UNIX时间戳的形式返回当前时间

SELECT UNIX_TIMESTAMP()->1418803177

UNIX_TIMESTAMP(d)

将时间d以UNIX时间戳的形式返回

SELECT UNIX_TIMESTAMP('2011-11-11 11:11:11')->1320981071

FROM_UNIXTIME(d)

将UNIX时间戳的时间转换为普通格式的时间

SELECT FROM_UNIXTIME(1320981071)->2011-11-11 11:11:11

UTC_DATE()

返回UTC日期

SELECT UTC_DATE()->2014-12-17

UTC_TIME()

返回UTC时间

SELECT UTC_TIME()->08:01:45 (慢了8小时)

MONTH(d)

返回日期d中的月份值,1->12

SELECT MONTH('2011-11-11 11:11:11')->11

MONTHNAME(d)

返回日期当中的月份名称,如Janyary

SELECT MONTHNAME('2011-11-11 11:11:11')->November

DAYNAME(d)

返回日期d是星期几,如Monday,Tuesday

SELECT DAYNAME('2011-11-11 11:11:11')->Friday

DAYOFWEEK(d)

日期d今天是星期几,1星期日,2星期一

SELECT DAYOFWEEK('2011-11-11 11:11:11')->6

WEEKDAY(d)

日期d今天是星期几,

 0表示星期一,1表示星期二

WEEK(d),WEEKOFYEAR(d)

计算日期d是本年的第几个星期,范围是0->53

SELECT WEEK('2011-11-11 11:11:11')->45

DAYOFYEAR(d)

计算日期d是本年的第几天

SELECT DAYOFYEAR('2011-11-11 11:11:11')->315

DAYOFMONTH(d)

计算日期d是本月的第几天

SELECT DAYOFMONTH('2011-11-11 11:11:11')->11

QUARTER(d)

返回日期d是第几季节,返回1->4

SELECT QUARTER('2011-11-11 11:11:11')->4

HOUR(t)

返回t中的小时值

SELECT HOUR('1:2:3')->1

MINUTE(t)

返回t中的分钟值

SELECT MINUTE('1:2:3')->2

SECOND(t)

返回t中的秒钟值

SELECT SECOND('1:2:3')->3

EXTRACT(type FROM d)

从日期d中获取指定的值,type指定返回的值

SELECT EXTRACT(MINUTE FROM '2011-11-11 11:11:11') ->11

type可取值为:

MICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEARSECOND_MICROSECONDMINUTE_MICROSECONDMINUTE_SECONDHOUR_MICROSECONDHOUR_SECONDHOUR_MINUTEDAY_MICROSECONDDAY_SECONDDAY_MINUTEDAY_HOURYEAR_MONTH

TIME_TO_SEC(t)

将时间t转换为秒

SELECT TIME_TO_SEC('1:12:00')->4320

SEC_TO_TIME(s)

将以秒为单位的时间s转换为时分秒的格式

SELECT SEC_TO_TIME(4320)->01:12:00

TO_DAYS(d)

计算日期d距离0000年1月1日的天数

SELECT TO_DAYS('0001-01-01 01:01:01')->366

FROM_DAYS(n)

计算从0000年1月1日开始n天后的日期

SELECT FROM_DAYS(1111)->0003-01-16

DATEDIFF(d1,d2)

计算日期d1->d2之间相隔的天数

SELECT DATEDIFF('2001-01-01','2001-02-02')->-32

ADDDATE(d,n)

计算其实日期d加上n天的日期

ADDDATE(d,INTERVAL expr type)

计算起始日期d加上一个时间段后的日期

SELECT ADDDATE('2011-11-11 11:11:11',1)->2011-11-12 11:11:11 (默认是天)

SELECT ADDDATE('2011-11-11 11:11:11', INTERVAL 5 MINUTE)->2011-11-11 11:16:11 (TYPE的取值与上面那个列出来的函数类似)

DATE_ADD(d,INTERVAL expr type)同上SUBDATE(d,n)

日期d减去n天后的日期

SELECT SUBDATE('2011-11-11 11:11:11', 1)->2011-11-10 11:11:11 (默认是天)

SUBDATE(d,INTERVAL expr type)

日期d减去一个时间段后的日期

SELECT SUBDATE('2011-11-11 11:11:11', INTERVAL 5 MINUTE)->2011-11-11 11:06:11 (TYPE的取值与上面那个列出来的函数类似)

ADDTIME(t,n)

时间t加上n秒的时间

SELECT ADDTIME('2011-11-11 11:11:11', 5)->2011-11-11 11:11:16 (秒)

SUBTIME(t,n)

时间t减去n秒的时间

SELECT SUBTIME('2011-11-11 11:11:11', 5)->2011-11-11 11:11:06 (秒)

DATE_FORMAT(d,f)

按表达式f的要求显示日期d

SELECT DATE_FORMAT('2011-11-11 11:11:11','%Y-%m-%d %r')->2011-11-11 11:11:11 AM

TIME_FORMAT(t,f)

按表达式f的要求显示时间t

SELECT TIME_FORMAT('11:11:11','%r')11:11:11 AM

GET_FORMAT(type,s)

获得国家地区时间格式函数

select get_format(date,'usa')->%m.%d.%Y (注意返回的就是这个奇怪的字符串(format字符串))


四,条件判断函数 1、IF(expr,v1,v2)函数   如果表达式expr成立,返回结果v1;否则,返回结果v2。 SELECT IF(1 > 0,'正确','错误')     ->正确 2、IFNULL(v1,v2)函数   如果v1的值不为NULL,则返回v1,否则返回v2。 SELECT IFNULL(null,'Hello Word') ->Hello Word 3、CASE   语法1: CASE    WHEN e1   THEN v1   WHEN e2   THEN e2   ...   ELSE vn END   CASE表示函数开始,END表示函数结束。如果e1成立,则返回v1,如果e2成立,则返回v2,当全部不成立则返回vn,而当有一个成立之后,后面的就不执行了。 SELECT CASE    WHEN 1 > 0   THEN '1 > 0'   WHEN 2 > 0   THEN '2 > 0'   ELSE '3 > 0'   END ->1 > 0 语法2: CASE expr    WHEN e1 THEN v1   WHEN e1 THEN v1   ...   ELSE vn END   如果表达式expr的值等于e1,返回v1;如果等于e2,则返回e2。否则返回vn。 SELECT CASE 1    WHEN 1 THEN '我是1'   WHEN 2 THEN '我是2' ELSE '你是谁'
五,加密函数 加密函数是MySQL用来对数据进行加密的函数。 1、PASSWORD(str)   该函数可以对字符串str进行加密,一般情况下,PASSWORD(str)用于给用户的密码加密。 SELECT PASSWORD('123')     ->*23AE809DDACAF96AF0FD78ED04B6A265E05AA257 2、MD5   MD5(str)函数可以对字符串str进行散列,可以用于一些普通的不需要解密的数据加密。 SELECT md5('123')     ->202cb962ac59075b964b07152d234b70 3、ENCODE(str,pswd_str)与DECODE(crypt_str,pswd_str)   ENCODE函数可以使用加密密码pswd_str来加密字符串str,加密结果是二进制数,需要使用BLOB类型的字段保存。该函数与DECODE是一对,需要同样的密码才能够解密。 SELECT ENCODE('123','xxoo')     ->;vx SELECT DECODE(';vx','xxoo')     ->123

转载请注明原文地址: https://www.6miu.com/read-2622975.html

最新回复(0)