MySql简单学习

MySql-增删改查之查(一)

选择数据库、查看数据库和表(USE、SHOW、DESCRIBE)

SHOW DATABASES;
USE world;
SHOW TABLES;
SHOW COLUMNS FROM country; #显示数据库world中表country的表列信息;包含字段名、数据类型、是否允许使用NULL、键信息、默认值以及其他信息;
DESCRIBE country; #MySql中DESCRIBE是SHOW COLUMNS FROM的快捷方式;

检索数据(SELECT、DISTINCT、LIMIT)

SELECT Name FROM country;
SELECT Name, Region, GNP FROM country;
SELECT * FROM country;

#DISTINCT
SELECT DISTINCT Region FROM country; #用关键字DISTINCT检索不同的行;
SELECT DISTINCT Region, GovernmentForm FROM country; # 注意:DISTINCT关键字应用于所有列而不仅是前置它的列

#LIMIT
SELECT Name FROM country
LIMIT 5; #显示前5行

SELECT Name FROM country
LIMIT 5,5; #从行5(第一个数字)开始,往后检索5(第二个数字)行;注意:sql下标从0开始,第一行为行0;

排序检索数据(ORDER BY、DESC)

SELECT Name FROM country
ORDER BY Name; #以Name字段的字母按A-Z排序;

SELECT Name, Region, GNP FROM country
ORDER BY Region, GNP; #先按Region的字母A-Z排序,然后再按GNP的数字从小到大排序;

SELECT Name FROM country
ORDER BY Name DESC; #以Name字段的字母按Z-A排序;

SELECT Name, Region, GNP FROM country
ORDER BY Region DESC, GNP; 先按Region的字母Z-A排序,然后再按GNP的数字从小到大排序;

# 注意:DESC只应用到直接位于其前面的列名;

过滤数据(WHERE、IS NULL)

SELECT *
FROM country
WHERE Region = 'Eastern Asia'; #WHERE子句操作符有=、<>、!=、<、<=、>、>=以及BETWEEN;

SELECT *
FROM country
WHERE Capital IS NULL; #IS NULL用来检查具有NULL值得列;

#注意:在通过过滤选择出不具有特定值的行时,不会返回NULL值的行!!!

进一步过滤数据(AND、OR、NOT、IN)

SELECT *
FROM country
WHERE Region = 'Eastern Asia' AND Capital IS NULL; #用AND关键字组合WHERE子句;

SELECT *
FROM country
WHERE Region = 'Eastern Asia' OR Region = 'Western Europe'; 

SELECT *
FROM country
WHERE Region = 'Eastern Asia' OR Region = 'Western Europe' AND GNP > 1000000;  #由于AND操作符的优先级高于OR,因此这个子句应该理解为GNP大于100w的西欧国家和所有的东亚国家;

SELECT *
FROM country
WHERE (Region = 'Eastern Asia' OR Region = 'Western Europe') AND GNP > 1000000;  #加上圆括号更改计算次序,理解为GNP大于100w的东亚或西欧国家;应该尽量使用圆括号;

SELECT *
FROM country
WHERE Region
IN ('Eastern Asia', 'Western Europe') AND GNP > 1000000
ORDER BY GNP DESC; #IN功能与OR大致相同,但更清晰直观、易管理、执行速度更快,IN子句的最大优点是可以包含其他SELECT子句

SELECT *
FROM country
WHERE Region
NOT IN ('Eastern Asia', 'Western Europe') AND GNP > 1000000;
# NOT子句否定后跟条件,注意:仅作用于直接跟在其后的条件关键字;

用通配符进行过滤(LIKE)

SELECT Name, IndepYear, Population
FROM country
WHERE Name LIKE 'ch%' OR Name LIKE '%an%'; #LIKE指示MySql,后跟的搜索模式(即由字面值、通配符或者两者组合构成的搜索条件)利用通配符匹配而不是直接相等匹配进行比较;
# %表示任意字符出现任意次数(包括0次);

SELECT Name, IndepYear, Population
FROM country
WHERE Name LIKE 'chin_'; # 下划线_通配符匹配单个任意字符,不能多也不能少;

#注意:使用通配符会增加搜索时间,尤其是当通配符放在搜索模式开头的时候,如非必要不要使用。

用正则表达式进行搜索(REGEXP)

SELECT Name, IndepYear, Population
FROM country
WHERE Name REGEXP '.na'; #匹配所有Name字段中包含‘na’的国家;REGEXP后面跟的是正则表达式,它和LIKE的区别是LIKE匹配整个列,如果被匹配的文本在列值中出现,LIKE不会找到它,而REGEXP在列值内进行匹配;

SELECT Name, IndepYear, Population
FROM country
WHERE Name REGEXP BINARY '.NA'; #默认不区分大小写,如要区分可在REGEXP后加上关键字BINARY;

SELECT Name, IndepYear, Population
FROM country
WHERE Name REGEXP '.na|.da'; #|为正则表达式的OR操作符;

SELECT Name, IndepYear, Population
FROM country
WHERE Name REGEXP '.[nd]a'; # []是另一种OR语句,它表示匹配'.na'或'.da',也等效于'.[n|d]a';

SELECT Name, IndepYear, Population
FROM country
WHERE Name REGEXP '.[^nd]a'; #字符集合也可以被否定,在集合的开始处放置一个^即可;

SELECT Name, IndepYear, Population
FROM country
WHERE Name REGEXP '.[a-z]a'; #范围匹配

SELECT Name, IndepYear, Population
FROM country
WHERE Name REGEXP '\\.'; 用\\为前导匹配特殊字符

SELECT Name, IndepYear, Population
FROM country
WHERE Name REGEXP 'china?'; # china?匹配chin或china;
元字符说明
*0个或多个匹配
+1个或多个匹配
?0个活1个匹配
{n}指定数目的匹配
{n,}不少于指定数目的匹配
{n,m}匹配数目的范围(m不超过255)
重复元字符
SELECT Name, IndepYear, Population
FROM country
WHERE Name REGEXP '^[m-oz]'; #匹配Name字段以m、n、o或者z开头的国家,其中^为定位符;
元字符说明
^文本的开始
$文本的结尾
[[:<:]]词的开始
[[:>:]]词的结尾
定位元字符

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据