mysql和sqlpostag_常⽤SQL操作(MySQL或PostgreSQL)与
相关数据库概念
本⽂对常⽤数据库操作及相关基本概念进⾏总结:MySQL和PostgreSQL对SQL的⽀持有所不同,⼤部分SQL操作还是⼀样的。
选择要⽤的数据库(MySQL):use database_name;
help show;
显⽰可⽤的数据库列表:show databases;
显⽰⼀个数据库内可⽤的表的列表:show tables;
显⽰表列:show columns from ⼀个表名; /describe 表名;  ⽰例:show columns from customers;    describe customers;
显⽰⼴泛的服务器状态信息:show status;
显⽰创建特定数据库或表的mysql语句:show create databases;  show create table;
显⽰授予⽤户的安全权限:show grants;
显⽰服务器错误或警告消息:show errors;  show warnings;
help select;
select 从⼀个或多个表中检索⼀个或多个数据列;
select 列(字段) from 表名;            select prod_name from products;
检索多个列
select prod_id, prod_name, prod_price from products;
检索所有列
select  * from products;
select vend_id from products;
检索不同的⾏
select distinct vend_id from products;
限制结果
select prod_name from products limit 5;
使⽤完全限定的列名
select  products.prod_name  from products;
使⽤完全限定的表名
select  products.prod_name  from  crashcouse.products;
排序检索数据
为了明确地排序⽤select语句检索出的数据,可使⽤order by字句;
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;
指定排序⽅向(默认升序排序从A到Z),降序排序必须指定desc关键字
desc关键字只应⽤到直接位于其前⾯的列名。
select prod_id, prod_price , prod_name from products order by prod_price desc;
简单的mysql语句⽤多个列排序
select prod_id, prod_price, prod_name from products order by prod_price desc, prod_name;
在多个列上降序排序:如果想在多个列上进⾏降序排序,必须对每个列指定desc关键字
与desc相反的关键字是asc(ascending),在排序是可以指定他,升序是默认的
使⽤order by 和limit的组合,能够出⼀个列中最⾼或最低的值。
order by ⼦句应位于from⼦句,limit⼦句应位于order by ⼦句后⾯
select  prod_price from products  order by  prod_price desc  limit 1;
过滤数据:使⽤select 语句的where ⼦句指定搜索条件(也称为过滤条件filter condition)
在select语句中,数据根据where⼦句中指定的搜索条件进⾏过滤。where⼦句在表名(from⼦句)之后给出,如下所⽰:select prod_name, prod_price from products where prod_price = 2.50;
在同时使⽤order by 和 where⼦句时,应该让order by 位于where之后
检查单个值 单引号⽤来限定字符串
select prod_name, prod_price from products where prod_name = ‘fuses’;
select prod_name , prod_price from products where prod_price < 10;
select prod_name , prod_price from products where prod_price < =10;
不匹配检查<>
select vend_id, prod_name from products where vend_id <> 1003;
select vend_id, prod_name from products where vend_id  != 1003;
范围值检查:between
select prod_name,prod_price from products where prod_price between 5 and 10;
空值检查 IS NULL
select prod_name from products where prod_price IS NULL;
select cust_id from customers where cust_email IS NULL;
数据过滤:组合where⼦句 and指⽰DBMS只返回满⾜所有给定条件的⾏
为了通过不⽌⼀个列进⾏过滤,可使⽤and操作符给where⼦句附件条件
select prod_id, prod_price, prod_name from products where vend_id =  1003 and prod_price <=10;
每添加⼀个过滤条件就使⽤⼀个and。
or操作指⽰检索匹配任⼀条件的⾏。
select prod_name, prod_price from products where vend_id =1002 or vend_id =1003
SQL在处理OR操作符前,优先处理AND操作符。
可以使⽤圆括号明确地分组相应的操作符。
select prod_name,prod_price from products where (vend_id = 1002 OR vend_id =1003) AND prod_price >=10;
IN操作符:⽤来指定条件范围,范围中的每个条件都可以进⾏匹配。IN取合法值的由逗号分隔的清单,全都在圆括号中。
select prod_name,prod_price from products where vend_id IN (1002,1003) order by prod_name;
IN操作符完成与OR相同的功能
select prod_name,prod_price from products where vend_id = 1002 OR vend_id = 1003 order by prod_name;
where⼦句中的not操作符有且只有⼀个功能:否定它之后所跟的任何条件的关键字。
select prod_name,prod_price  from products where vend_id NOT IN (1002,1003) order by prod_name;
⽤通配符进⾏过滤
通配符:⽤来匹配值的⼀部分的特殊字符。
搜索模式:由字⾯值、通配符或两者组合构成的搜索条件。
通配符是SQL的where⼦句中有特殊含义的字符,SQL⽀持⼏种通配符
为在搜索⼦句中使⽤通配符,必须使⽤LIKE操作符。
百分号(%)通配符:%表⽰任何字符出现任意次数。
select prod_id, prod_name from products where prod_name LIKE ‘jet%’;
select prod_id prod_name from products where prod_name LIKE ‘%anvil%’;
select prod_name from products where prod_name LIKE ‘s%s’;
下划线(_)通配符:下划线⽤途与%⼀样,下划线只匹配单个字符⽽不是多个字符。
select prod_id, prod_name from products where prod_name LIKE ‘_ ton anvil’;
select prod_id, prod_name from products where prod_name LIKE ‘% ton anvil’;
⽤正则表达式进⾏搜索
正则表达式是⽤来匹配⽂本的特殊的串(字符集合)
基本字符匹配
select prod_name from products where prod_name regexp ‘1000’ order by prod_name;
除关键LIKE被regexp替代外,这条语句看上去像使⽤LIKE的语句,它告诉MySQL:regexp后跟的东西作为正则表达式(与⽂字正⽂1000匹配的⼀个正则表达式)处理。
select prod_name from products where prod_name regexp ‘.1000’ order by prod_name;
这⾥使⽤了正则表达式 .1000, .是正则表达式语⾔中⼀个特殊的字符。它表⽰匹配任意⼀个字符。
|为正则表达式的OR操作符,如下所⽰:
select prod_name from products where prod_name regexp ‘1000|2000’ order by prod_name;
匹配⼏个字符之⼀
匹配特定的字符,可通过指定⼀组⽤[ 和 ]括起来的字符来完成。
select prod_name from products where prod_name regexp ‘[123] Ton’ order by prod_name;
[123]定义⼀组字符,它的意思是匹配1或2或3
为否定⼀个字符集,在集合的开始处放置⼀个^即可,[^123]匹配除这些字符外的任何东西。
匹配范围:集合可⽤来定义要匹配的⼀个或多个字符。
[0123456789], [0-9]匹配数字0到9
[a-z]匹配任意字母字符
select prod_name from products where prod_name regexp ‘[1-5] Ton’ order by prod_name;
为了匹配特殊字符必须⽤\\为前导。\\- 表⽰查 - ,\\. 表⽰查 . 。
select vend_name from vendors where vend_name regexp ‘\\.’ order by vend_name;
创建计算字段
计算字段并不实际存在于数据库表中,是运⾏时在select语句内创建的。
拼接字段:
拼接:将值联接到⼀起构成单个值。解决办法:把两个列拼接起来,在MySQL的select语句中,可以使⽤Concat()函数来拼接两个列。多数DBMS使⽤+或||来实现拼接。
Concat()拼接串,即把多个串连接起来形成⼀个较长的串。Concat()需要⼀个或多个指定的串,各个串之间⽤逗号分隔。
select Concat(vend_name, ‘ (‘, vend_conntry, ‘) ‘ ) from vendors order by vend_name;
通过删除数据右侧多余的空格来整理数据,可以使⽤MySQL的RTrim()函数来完成,如下:
select Concat(RTrim(vend_name), ‘ (‘, RTrim(vend_country), ‘)’) from vendors order by vend_name;
RTrim()函数去掉值右边的所有空格。通过使⽤RTrim(),各个列都进⾏了整理。
MySQL还⽀持LTrim()去掉左边的空格以及Trim()去掉串左右两边的空格。
使⽤别名:
SQL⽀持别名。别名(alias)是⼀个字段或值的替换名。别名⽤AS关键字赋予。
select Concat(RTrim(vend_name), ‘ (‘, RTrim(vend_country), ‘)’) AS vend_title from vendors order by vend_name;
执⾏算术计算
select prod_id, quantity, item_price  from  orderitems where order_num = 20005;
select prod_id,
quantity,
item_price, quantity * item_price AS expended_price
from  orderitems
where order_num = 20005;
如何测试计算:
select提供了测试和试验函数与计算的⼀个很好的办法。
select 可以省略from⼦句以便简单地访问和处理表达式。
如:select 3 * 2;将返回6,select Trim(‘abc’);将返回abc.
select Now()利⽤Now()函数返回当前⽇期和时间。
使⽤数据处理函数
⽂本处理函数 Upper()函数(将⽂本转换为⼤写)
select vend_name, Upper(vend_name) AS vend_name_upcase
from vendors
order by vend_name;
常⽤的⽂本处理函数
Left( ) 返回串左边的字符
Length( ) 返回串的长度
Locate( )  出串的⼀个⼦串
Lower( )  将串转换为⼩写
LTrim( )    去掉串左边的空格
Right( )    返回串右边的字符
RTrim( )  去掉串右边的空格
Soundex( ) 返回串的SOUNDEX值:将任何⽂本串转换为描述其语⾳表⽰的字母数字模式,
使得能对串进⾏发⾳⽐较⼆不是字母⽐较。
SubString( ) 返回⼦串的字符
Upper( )            将串转换为⼤写
select cust_name, cust_contact from customers where Soundex(cust_contact) = Soundex(‘Y Lie’);时间和⽇期处理函数
常⽤⽇期和时间处理函数
AddDate( )                          增加⼀个⽇期(天,周等)
AddTime( )                          增加⼀个时间(时,分等)
CurDate( )                          返回当前⽇期
CurTime( )                          返回当前时间
Date( )                                  返回当前⽇期时间的⽇期部分
DateDiff( )                          计算两个⽇期之差
Date_Add( )                        ⾼度灵活的⽇期运算函数
Date_Format( )                  返回⼀个格式化的⽇期或时间串
Day( )                                    返回⼀个⽇期的天数部分
DayOfWeek( )                              对于⼀个⽇期,返回对应的星期⼏
Hour( )                                          返回⼀个时间的⼩时部分
Minute( )                                      返回⼀个时间的分钟部分
Month( )                                        返回⼀个时间的⽉份部分

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。