Show database;#返回可用数据库的一个列表
Show Tables;#返回当前选择数据库内的可用表的列表
Show COLUMNS FROM 表名;#表中的每个字段返回一行,行中包含字段名,数据类型,是否允许NULL,键信息,默认信息,其它信息等
DESCRIBE 表名;#是SHOW COLUMNS FROM 表名; 的一种快捷表达方式
#检索单列
SELECT COLUMN_NAME FROM TABLE_NAME;#检索列名为COLUMN_NAME 的所有行
#检索多列
SELECT a, b, c FROM table_name;#列名必须以逗号分隔
#检索所有列
SELECT * FROM table_name;#“*”表示通配符
#检索不同的行
SELECT DISTINCT a FROM table_name;#如果不加关键字DISTINCT,可能不同的行中会有很多重复值,加了DISTINCT会剔除重复值,保证保留下的每行值都不同
#限制返回行数
SELECT * FROM table_name LIMIT 5;#LIMIT 5表示返回的行数不多于5行
多条SQL语句必须以“;”分隔,
SQL语句不区分大小写,
SELECT 列名 FROM 这种检索方式,检索出来的每行都是没有顺序的,应该是最初添加到表的顺序,以及对表进行删除、修改等操作之后的顺序
ORDER BY语句:
#按多个列排序
SELECT a, b, c FROM table_name ORDER BY a, b;#意思就是先按照a排序,再按照b排序
#指定排序方向ORDER BY默认的排序方向是升序(从A到Z),降序排序必须使用关键字DESC
SELECT a, v, b FROM table_name ORDER BY a DESC;
在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名之后给出。在同时使用ORDER BY 与WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误。
MySQL在执行匹配时默认不区分大小写
SELECT a, b FROM table_name WHERE a = 2.5;
WHERE子句操作符:
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 在指定的两个值之间 |
SELECT a, b FROM table_name WHERE a = 'fuses';
#何时使用引号?当要比较的类型是串类型时,需要加单引号,若是数值型的则不必加引号
#空值检查(NULL)
SELECT a FROM table_name WHERE a IS NULL;#这句话返回a是空值的所有行
为了进行更强的过滤控制,,MySQL允许给出多个WHERE子句,这些子句可以以两种方式使用:以AND子句的方式或OR子句的方式使用。
AND操作符:
为了通过不止一个列进行过滤,7可使用AND操作符给WHERE子句附加条件,示例如下:
SELECT a, b, c, d FROM table_name WHERE a =1003 AND b <= 10;
AND用来指示检索满足所有条件的行,每添加一个条件就要添加一个AND。
OR操作符:
OR与AND操作符不同,OR表示检索出匹配任一条件的行。SQL在处理OR操作之前,优先处理AND操作。
SELECT a, b, c, d FROM table_name WHERE a =1003 OR b <= 10;
#计算次序
SELECT a, b, c, d FROM table_name WHERE a =1003 OR a = 1002 AND c >=10;#AND在计算次序中优先级更高
#解决此问题的办法是使用圆括号明确地分组相应地操作符
SELECT a, b, c, d FROM table_name WHERE (a =1003 OR a = 1002) AND c >=10;
IN操作符:
圆括号在WHERE子句中还有另外一种用法,IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。
SELECT a, b, c, d FROM table_name WHERE a IN (1003,1002) ORDER BY c ;#此SELECT语句检索1002和1003的所有行,IN操作符完成与OR相同的功能
NOT操作符:
WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。
SELECT a, b, c, d FROM table_name WHERE a NOT IN (1003,1002) ORDER BY c ;#此SELECT语句检索除了1002和1003的所有行
NOT操作符在与IN操作符联合使用时,NOT使找出与条件列表不匹配的行非常简单
通配符用来匹配值的一部分的特殊字符
为在搜索子句中使用通配符,必须使用LIKE操作符
百分号(%)通配符:
%表示任意字符出现的任意次数,比如为了找出所有以词Jet起头的产品 ,可使用一下SELECT 语句:
SELECT a, b FROM table_name
WHERE a LIKE 'Jet%';
通配符可以在搜索模式中任意位置使用,并且可以使用多个通配符。
下划线(_)通配符:
下划线的用途与百分号(%)一样,但下划线只匹配单个字符而不是多个字符。
正则表达式是用来匹配文本的特殊串(字符集合),
正则表达式用正则表达式语言建立,与任意语言一样,正在表达式具有你必须学习的特殊语法和指令。
SELECT a FROM table_name WHERE a REGEXP '1000' ORDER BY a;
关键字LIKE被REGEXP替代,REGEXP告诉MySQL:REGEXP后跟的东西作为正则表达式处理
SELECT a FROM table_name WHERE a REGEXP '.000' ORDER BY a;
#这里使用了正则表达式'.000',‘.’是正则表达式语言中一个特殊的字符,台表示匹配任意一个字符,因此1000和2000等都匹配且返回。
MySQL中的正在表达式匹配不区分大小写
为搜索两个串之一,使用正在表达式语言中的’|’,|为正在表达式中的OR操作符。它表示匹配其中之一,因此1000和2000都匹配返回。
SELECT a FROM table_name WHERE a REGEXP '.000' ORDER BY a;
匹配几个字符之一:
匹配任何单一字符,如果只想匹配特定的字符,可通过指定一组用**[和]**括起来的字符来完成,如下所示:
SELECT a FROM table_name WHERE a REGEXP '[123] Ton' ORDER BY a;
这里,使用了正则表达式[123] Ton。[123]定义一组字符,它的意思是匹配1或2或3,因此1 ton 和2 ton 和3 ton都匹配且返回。所以,[]是另一种形式的OR语句,[123]也可以用[1|2|3]来表示。
同时,[^123]表示匹配除这些字符的任何东西。
匹配范围:
集合可用来定义要匹配的一个或多个字符。例如[123456789]将会匹配数字0-9,为了简化这种类型的集合,可使用-来定义一个范围。[0-9]可取代上述表达,[a-z]可匹配任意字母字符。
匹配特殊字符:
为了匹配特殊字符,必须使用\为前导。\-表示 查找-,\.表示查找.。这种处理就是所谓的转义,正则表达式内具有特殊意义的所有字符都必须使用这种方式转义。
计算字段:
计算字段并不实际存在于数据库表中,计算字段是运行时在SELECT语句内创建的
字段(field)基本上与列的意思相同经常互换使用
拼接字段:
拼接将值联结到一起构成单个值
SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表。联结是利用SQL中的SELECT能执行的最重要的操作。
在能够有效地使用联结前,必须了解关系表以及关系数据库设计的一些基础知识。
首先,关系表 的理解:
关系表的设计就是要保证把信息分解成多个表,一类数据一个表,各表通过某些常用的值(即关系设计中的关系,关系必须是唯一主键,是这个表的唯一标识)互相关联。
创建联结:
SELECT vend_name, prod_name, prod_price FROM table_a, table_b
WHERE table_a.vend_id = table_b.vend_id
ORDER BY vend_name, prod_name;
#这里看到要匹配的列以table_a.vend_id 和 table_b.vend_id命名,如果只给出vend_id,则SQL会不知道是哪个表中的vend_id ,古需要完全限定列名,告诉SQL是哪个表中的id列,否则会报错
WHERE子句的重要性:在联结两个表时,实际上做的是将第一个表中的第一行与第二个表中的每一行配对,实际上是笛卡尔积,而WHERE子句作为过滤条件,它只包含那些匹配给定条件(这里指联结条件)的行。
两个表进行内联接:
SELECT vend_name, prod_name, prod_price FROM table_a INNER JOIN table_b ON table_a.vend_id = table_b.vend_id;
#此语句中的SELECT语句与前面的相同,但FROM子句不同,内联结的FROM子句是由INNER JOIN指定,联结条件用特定的ON子句而不是WHERE子句给出。结果与WHERE子句的结果相同
联结多个表:
SQL对一条SELECT语句中可以联结的表的数目没有限制。创建联结的基本规则也相同。首先列出所有表,然后定义表之间的关系。例如:
SELECT vend_name, prod_name, prod_price, quantity FROM table_a, table_b, table_c WHERE table_a.vend_id = table_b.vend_id AND tabel_a.prod_id = table_c.prod_id;
综上,内部联结就是只返回两个表中的行的数据完全可以按联结条件匹配的行。
12.2 外部联结
许多联结将一个表中的行与另一个表中的行相关联,但有时候会需要包含没有关联行的那些行,所以外部联结就是做这个事情的,那么两个表联结的时候到底该按哪个表为基准,故引入左外联结(LEFT OUTER JOIN)和右外联结(RIGHT OUTER JOIN),顾名思义,左外联结就是以左表为基准,选择左表的所有行,右边的表的行去匹配。
与12合并
目录5-19待更新,本周内更完。