MySQL必知必会(一)

选择数据库

USE database_name

获取数据库中的列表

SHOW DATABASES
SHOW TABLES
# 返回的是tab-name中包含的字段名、数据类型、是否允许NULL、键信息、默认值、其他信息等
SHOW COLUNMS
FROM tab-name

检索数据

SELECT col-name-1,col-name-2, ... ,col-name-n
FROM tab-name;
# 多条sql语句之间是需要用分号隔开的
# sql不区分大小写,所以SELECT和select是一样的,写成Select也没问题,但是一般来说SQL的关键字都是大写,而对于列表名,表明,字段等都用小写

SELECT *
FROM tab-name;

# 检索出来的列,我只想要不同的值,使用DISTINCT
SELECT DISTINCT col-name
FROM tab-name;

# 指定输出行数
# 只返回最多5行,多于5行只返回5行。不够5行,就有几行返回几行
SELECT col-name
FROM tab-name
LIMIT 5;
# 从某一行开始往后数几行
SELECT col-name
FROM tab-name
LIMIT 5,5;
# 从第5行开始,往后显示5行的数据
# 需要注意的是,行数和数组的下标是一样的,从0开始。因此对于LIMIT 1,1来说,就是从第二行开始的一行,那么就是第二行。

# 使用完全限定的表名,这么使用的目的在于,后续表多了之后,可能不同的表之前会有相同的列表名,这样就有点分不清楚字段具体是哪一个表中的字段。
SELECT tab-name.clo-name
FROM database.tab-name;

排序检索数据

# 提取出来col-name的数据,并按照col-name的字母或者数字大小进行排序,这里的排序默认为升序,也就是越向下越大
SELECT col-name
FROM tab-name
ORDER BY col-name;

# 通过多个字段进行排序
# 先按照col-1字段进行降序排序,然后在前面的排序的基础上,对第二个字段col-2进行排序
SELECT col-name-1,col-name-2
FROM tab-name
ORDER BY col-name-1,col-name-2;

# 指定排序方向,默认是升序,使用DESC可以改变排序方式为升序
# 同样适用于多字段排序
# 与DESC相对应的是ASC但是一般默认为ASC
SELECT col-name
FROM tab-name
ORDER BY col-name DESC;

# 找出最大的一个值
SELECT price
FROM tab-name
ORDER BY price DESC
LIMIT 1;

过滤数据

# 使用WHERE语句进行筛选或者说是过滤
SELECT col-name
FROM tab-name
WHERE col-name = 2.50;
# 或者是如下的几种都可以,前提是前面SELECT部分一样
WHERE col-name < 2.50;
WHERE col-name > 2.50;
WHERE col-name <= 2.50;
WHERE col-name >= 2.50;
WHERE col-name = 'fuses';
WHERE col-name != 2.50;
# 这里的<>代表的是不等于,等同于!=
WHERE col-name <> 2.50;
# 范围值筛选
WHERE col-name BETWEEN 5 AND 10;
# 空值检查
WHERE col-name IS NULL;

高级过滤,使用AND、OR、IN、NOT等

# 同样的这里的大于小于可以换成上面的一些大于小于,大于等于一类的,只要合理
SELECT col-name
FROM tab-name
WHERE col-name > 10 AND col-name < 20;

# OR
SELECT col-name
FROM tab-name
WHERE col-name = 10 OR col-name = 20;

# IN,基本上的作用和上面的OR是相同的,只不过更加的简洁直观,并且IN一般是比OR执行的个更快,而且IN中可以包含其他的SELECT语句,这一点是最大的优点
SELECT col-name
FROM tab-name
WHERE col-name IN (10,20);

# NOT IN
SELECT col-name
FROM tab-name
WHERE col-name NOT IN (10,20);

# 计算次序,在同时拥有OR和AND的时候,如果不加入括号,就是先处理AND后处理OR,所以为了防止出现问题,因此需要加入括号
SELECT col-name-1,col-name-2
FROM tab-name
WHERE (col-name-1 = 10 OR col-name-1 = 20) AND col-name-2 > 10;

使用通配符进行过滤(LIKE,“_”)

# 使用LIKE进行匹配
# 使用LIKE来匹配列col-name中所有jet开头的值
SELECT col-name
FROM tab-name
WHERE col-name LIKE 'jet%';

# 使用LIKE来筛选列col-name中,包含ant字母的数据
SELECT col-name
FROM tab-name
WHERE col-name LIKE '%ant%';

# 使用LIKE来筛选列col-name中,s开头,e结尾
SELECT col-name
FROM tab-name
WHERE col-name LIKE 's%e';

# 需要注意的是,这是一种强匹配,当然强匹配是我自己定义的,我认为这是一种强匹配。对于'%ant'来说,如果ant后面包含了空字符,或者是其他字符,%ant就不能对其进行筛选了。只有'%ant%'能筛选。
# %的匹配是不限制字符以及数量的。也就是对'%ant%'说,只要加上了%,不论有多少个字符,只要包含ant三个字符,就可以筛选或者说是过滤出来。而不加上,就是属于一种强匹配。
# 下划线通配符,用途与%一样,只不过下线只匹配单个的字符而不是多个字符
SELECT col-name-1,col-name-2
FROM tab-name
WHERE col-name LIKE '_ ton anvil';

正则表达式进行搜索或者说是筛选

# 其实整体上和LIKE的形式非常相似,LIKE后面接的是%或者_表示的用来匹配字符
# 对于正则表达式来说,将LIKE关键字替换为了 REGEXP 后面同样接的是用来匹配的字符,只不过正则表达式没有像%和_一样简单
# 一般形式
SELECT col-name
FROM tab-name
WHERE col-name REGEXP '1000'
ORDER BY col-name;

需要注意的是:

# 对于like和REGEXP,虽然两者的用处都是一样的,但是存在一些差别,例如下面的例子
# 需要说明的是,1000包含在数据中,但是完整数据是 'JetPack 1000'
SELECT col-name
FROM tab-name
WHERE col-name LIKE '1000'
ORDER BY col-name;
# 结果是没有任何的结果

SELECT col-name
FROM tab-name
WHERE col-name REGEXP '1000'
ORDER BY col-name;
# 结果是能够搜索出来正确结果,'JetPack 1000'

# 为什么一个能有正确结果,一个没有
# 原因在于,LIKE匹配的是整个列。如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不会被返回(除非使用通配符)。而REGEXP是在列值内进行匹配,如果被匹配的文本在列值中出现,REGEXP就会找到它,相应的行就被返回。
# 如果需要使用强匹配,就是大小写也必须要和正则表达式匹配上,可以加入BINARY字段。
SELECT col-name
FROM tab-name
WHERE col-name REGEXP BINARY 'JetPack .000'
ORDER BY col-name;
# OR匹配
SELECT col-name
FROM tab-name
WHERE col-name REGEXP '1000|2000'
ORDER BY col-name;
# 几种特殊的形式

# 1或者2或者3
REGEXP '[123] Ton'
# 范围匹配
REGEXP '[1-5] Ton'
# 特殊字符,在特殊字符前面加入'\\'就可以对特殊字符进行匹配
REGEXP '\\.'
元字符说明
\\f换页
\\n换行
\\r回车
\\t制表
\\v纵向制表

还有很多的正则表达式,就需要后续的进一步学习,后面再对常见的表达式进行一个总结。

计算字段

# 拼接字段
SELECT Concat(col-name-1,'(',col-name-2,')')
FROM tab-name
ORDER BY col-name;
# 把col-1和col-2的内容进行一个拼接,col-1(col-2),其中的括号,由于就是一个字符,所以用引号将其括起来
# 这个时候问题在于,最终所显示出来的结果,列的名字为Concat(col-name-1,'(',col-name-2,')'),不方便我们进行识别,所以就需要使用AS对其重命名
SELECT Concat(col-name-1,'(',col-name-2,')') AS name
FROM tab-name
ORDER BY col-name;


# 计算
SELECT col-name-1,col-name-2,col-name-1*col-name-2 AS result
FROM tab-name
WHERE col-name-1 = 20005
# 返回的就是3列数据,最后一列数据的列名叫reuslt,内容就是col-1和col2乘积的结果,当然,需要col-1和col-2中数据是数字格式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值