MySQL语句示例

USE 数据库名;    执行数据库操作前,需要选择一个数据库。

SHOW DATABASES;    返回可用数据库的一个列表。

SHOW TABLES;    返回当前选择的数据库内 可用表的列表。

SHOW COLUMNS FROM 表名;    显示表中的列。

DESCRIBE 表名;    是SHOW COLUMNS FROM 表名;的一种快捷方式。

SELECT 列名 FROM 表名;    从表中检索一个列。SELECT返回所有匹配的行

SELECT 列名1,列名2,列名3 FROM 表名;    从一个表中检索多个列。

SELECT * FROM 表名;    从一个表中检索所有列。

SELECT DISTINCT 列名 FROM 表名;    只返回不同的值(去重)。
//DISTINCE关键字必须直接放在“列名”前面。DISTINCE关键字应用于所有的列,而不仅是直接前置它的列。

SELECT 列名 FROM 表名 LIMIT 5;    返回不多余5行(即返回前五行)。

SELECT 列名 FROM 表名 LIMIT 5,5;    返回从行5开始的5行。第一个数为开始位置,第二个数为要检索的行数。注意:检索出来的第一行为 行0。

SELECT 表名.列名 FROM 库名.表名;    列名和表名都可以完全限定。

SELECT 列名1,列名2,列名3 FROM 表名 ORDER BY 列名1,列名2;    ORDER BY使用的列,可以不是我们要检索的列。ORDER BY默认是升序排序(从A到Z,从小到大)。

SELECT 列名1,列名2,列名3 FROM 表名 ORDER BY 列名1 DESC,列名2 DESC,列名3 ;    为了降序排序(从Z到A,从大到小),必须指定DESC关键字。DESC关键字只作用到直接位于其前面的列。想在多个列上降序排序,必须对多个列指定DESC关键字。

SELECT 列名 FROM 表名 ORDER BY 列名 DESC LIMIT 1;    找出一个列的最高值。
//在给出ORDER BY子句时,应该保证它位于FROM子句之后。如果使用LIMIT,它必须位于ORDER BY之后。使用子句的次序不对将产生错误消息。

    
SELECT prod_name,prod_price FROM product WHERE prod_price=2.50;    从products表中检索两个列,但不返回所有行,只返回prod_price值为2.50的行
//在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误


SELECT prod_name,prod_price FROM product WHERE prod_name='fuses';    返回prod_name的值为Fuses的一行。MySQL在执行匹配时默认不区分大小写,所以fuses与Fuses匹配。
//单引号用来限定字符串。如果将值与串类型的列进行比较,则需要限定引号。用来与数值列进行比较的值不用引号。

SELECT prod_name,prod_price FROM product WHERE prod_price<=10;    检索价格小于等于10美元的所有产品

SELECT vend_id,prod_name FROM product WHERE vend_id <> 1003;    列出不是由供应商1003制造的所有产品

SELECT prod_name,prod_price FROM product WHERE prod_price BETWEEN 5 AND 10;    检索价格在5美元和10美元之间的所有产品
//BETWEEN操作符需要两个值,即范围的开始值和结束值。可用来检索价格在5美元和10美元之间或日期在指定的开始日期和结束日期之间的所有产品

 


SELECT语句有一个特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就是IS NULL子句。

SELECT prod_name FROM product WHERE prod_price IS NULL;    返回没有价格(空prod_price字段,不是价格为0)的所有产品

在创建表时,表设计人员可以指定其中的列 是否可以不包含值。在一个列不包含值时,称其为包含空值NULL。

NULL 无值(no value),它与字段包含0、空字符串 或 仅仅包含空格 不同。

 NULL 与 不匹配

在通过过滤选择出不具有特定值的行时,你可能希望返回具有NULL值的行。但是,不行。因为未知具有特殊的含义,数据库不知道它们是否匹配,所以在匹配过滤 或 不匹配过滤时不返回它们。因此,在过滤数据时,一定要验证 返回数据中确实给出了被
过滤列具有NULL的行。


SELECT prod_id,prod_name,prod_price FROM products WHERE vend_id=1003 AND prod_price <=10;
//检索由供应商1003制造且价格小于等于10美元的所有产品的名称和价格
//上述例子中使用了只包含一个关键字AND的语句,把两个过滤条件组合在一起。
//还可以添加多个过滤条件,每添加一条就要使用一个AND。


SELECT prod_name,prod_price FROM products WHERE vend_id=1002 OR vend_id=1003;
//检索由任一个指定供应商制造的所有产品的产品名和价格

SELECT prod_name,prod_price FROM products WHERE vend_id=1002 OR vend_id=1003 AND prod_price >=10;
//由供应商1003制造的任何价格为10美元(含)以上的产品,或者由供应商1002制造的任何产品
//换句话说,由于AND在计算次序中优先级比OR更高

SELECT prod_name,prod_price FROM products WHERE (vend_id=1002 OR vend_id=1003) AND prod_price >=10;
//使用圆括号明确地分组相应的操作符。因为圆括号具有较AND或OR操作符高的计算次序,DBMS首先过滤圆括号内的OR条件。
//这时,SQL语句变成了选择由供应商1002或1003制造的且价格都在10美元(含)以上的任何产品


SELECT prod_name,prod_price FROM products WHERE vend_id IN (1001,1002) ORDER BY prod_name;
//检索供应商1002和1003制造的所有产品
//IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。
//IN操作符后跟由逗号分隔的合法值清单,整个清单必须括在圆括号中。

SELECT prod_name,prod_price FROM products WHERE vend_id NOT IN (1001,1002) ORDER BY prod_name;
//检索 除1002和1003之外的所有供应商制造的产品
//NOT否定跟在它之后的条件

SELECT prod_name,prod_price FROM products WHERE prod_name LIKE 'jet%';  找出所有以词jet起头的产品
// %表示任何字符出现任意次数

区分大小写: 根据MySQL的配置方式,搜索可以是区分大小写的。如果区分大小写,'jet%'与JetPack 1000将不匹配。

SELECT prod_name,prod_price FROM products WHERE prod_name LIKE '%anvil%';

注意尾空格: 尾空格可能会 干扰 通配符匹配。例如,在保存词anvil 时, 如果它后面有一个或多个空格, 则子句WHERE
prod_name LIKE '%anvil'将不会匹配它们,因为在最后的l后有多余的字符。解决这个问题的一个简单的办法是在搜索模
式最后附加一个%。一个更好的办法是使用函数去掉首尾空格。

注意NULL: 虽然似乎%通配符可以匹配任何东西,但有一个例外,即NULL。即使是WHERE prod_name LIKE '%'也不能匹配用值NULL作为产品名的行。

SELECT prod_id,prod_name FROM products WHERE prod_name LIKE '_ton anvil'; 
//下划线(_)的用途与%一样,但下划线只匹配单个字符而不是多个字符。
//与 % 能匹配0个字符 不一样,_总是匹配一个字符,不能多也不能少

 正则表达式的作用是 匹配文本,将一个模式(正则表达式)与一个文本串进行比较

SELECT prod_name FROM products WHERE prod_name REGEXP ‘1000’ ORDER BY prod_name;
//检索列prod_name包含文本1000的所有行
//REGEXP后所跟的东西作为正则表达式(与文字正文1000匹配的一个正则表达式)处理。

在LIKE和REGEXP之间有一个重要的差别

LIKE匹配整个列。如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不被返回(除非使用通配符)。而REGEXP在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP将会找到它,相应的行将被返回。这是一个非常重要的差别。

匹配不区分大小写

MySQL中的正则表达式匹配(自版本3.23.4后)不区分大小写(即,大写和小写都匹配)。

为区分大小写,可使用BINARY关键字,如 WHERE prod_name REGEXP BINARY 'JetPack .000';

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值