TOP 子句用于规定要返回的记录的数目。
对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
注释:并非所有的数据库系统都支持 TOP 子句。
用于数据库的模糊查询数据
"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表示查询的数据在某个元素里面
SELECT * FROM w_wzx WHERE w_name IN ("dff","as")
Between表示查询的数据在某两个数据之间
Id在3到5之间
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 操作符的!
将数据库名称或者某个字段设置其他名称
将表名为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。
数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。
· JOIN: 如果表中有至少一个匹配,则返回行
· LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
· RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
· FULL 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
1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
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 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
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 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 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 dffd
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)
)
约束用于限制加入表的数据的类型。
可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。
我们将主要探讨以下几种约束:
1:NOT NULL 设置的字段不为空
·
:2:UNIQUE
UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
3:PRIMARY KEY
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
4:FOREIGN KEY
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
让我们通过一个例子来解释外键。请看下面两个表:
5:CHECK
CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
6:DEFAULT
DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录
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
返回字符串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
返回当前日期
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字符串))
