MySQL学习笔记(3)正则表达式、操作符、注释

三种添加注释的方式:

  1. #……

  2. - - ……
    注意这两个短横线之间没有空格,之后+空格+注释内容

  3. /*……*/
    在这里插入图片描述

在workbench中打开表不能双击单元格修改数据:
因为没有设置主键,添加主键即可。
作业练习:
建立sc(学习表)如下:
在这里插入图片描述

SELECT * FROM day_one.sc;
#选修了2号同学选修课程的学生学号。
SELECT DISTINCT B.Sno FROM sc A,sc B
WHERE A.Sno='2'
AND B.Sno<>'2'
AND A.Cno=B.Cno;
#同时选修1号和2号课程的学生学号
#方法一
SELECT DISTINCT sc.Sno FROM sc 
WHERE exists 
(SELECT * FROM sc A
where sc.Sno=A.Sno
AND sc.Cno<>A.Cno
);
#方法二
SELECT DISTINCT A.Sno FROM sc A,sc B
WHERE  A.Sno=B.Sno
AND A.Cno<>B.Cno;

建立course(课程表)如下:
在这里插入图片描述

#求每一门课程的先修课课号
SELECT A.Cno,B.Cno AS Pre_cou FROM course A, course B
WHERE A.Pre=B.Cname 
order by A.Cno;

DISTINCT关键字:
应用于所有列而不仅仅是其前置它的列。
limit:

#选出前5行
select prod_name
from product
limit 5;
#选出第二个 五行
select prod_name
from product
limit 5,5;#第一个参数表示开始位置,第二个参数为要检索的行数
#注:检索出的第一条记录是行0
#MySQL 5 的另一种写法为LIMIT 4 OFFSET 3,也表示从行3开始取4行,集LIMIT 3,4

完全限定的引用
database.tablename
tablename.columnname

caluse : 子句

排序:

select prod_name
from products
order by prod_name

注:也可通过非选择列进行排序,也可按照多个列进行排序
默认排序方向是A-Z,
指定降序使用DESC,例如:

select prod_id,prod_price
from products
order by prod_price DESC;
#DESC关键字只应用到位于前面的列名。如果想在多个列上进行降序排序,必须对每个列指定DESC关键字。
select prod_od,prod_price,prod_name
from products
order by prod_price DESC,prod_name
#对价格降序,对名字进行升序排序

ORDER BY && LIMIT :
ORDER BY 子句,应在FROM子句之后;
LIMIT 子句,必须放在 ORDER BY 之后,使用子句的次序不对将产生错误消息。
ORDER BY 与 WHERE 同时出现时,应该让ORDER BY 放在后面。
范围值检查:

select prod_name,prod_price
from products
where prod_price between 5 and 10
select * 
from laptop
where price between 13000 and 16000;

操作符or的应用:
and相同,但and的优先级高于or
示例:

#检索条件:生产商1002或者1003
select prod_name,prod_price
from products
where vend_id=1002 and vend_id=1003;
#检索条件:生产商1002或者1003的,而且价格不低于10
select prod_name,prod_price
from products
where (vend_id=1002 or vend_id=1003) and prod_price>=10;

in操作符
用于指定范围.

#找出生产商为1002或1003的
select prod_name,prod_price
from products
where vend_id in (1002,1003)
order by prod_name;
相当于
select prod_name,prod_price
from products
where vend_id=1002 or vend_id=1003
order by prod_name;

IN操作符一般比OR操作符执行得更快。
IN 可包含其他SELECT语句,使得能够动态地建立WHERE子句。
NOT操作符
用于取反。

#找出生产商不为1002、1003的
select prod_name,prod_price
from products
where vend_id not in (1002,1003)
order by prod_name;

通配符(wildcard)
%表示任何字符出现任意次数

#查找所以以jet起头的产品
select prod_id,prod_name
from products
where prod_name like 'jet%';

注:通配符不可匹配NULL
_下划线只匹配单个字符而不是多个字符。
正则表达式:
正则表达式用来匹配文本的特殊的串(字符集合)。

#找出prod_name中含1000的列值
select prod_name
from products
where prod_name regexp '1000'
order by prod_name;

. 匹配任意一个字符,示例

select prod_name
from products
where prod_name regexp '.000'
order by prod_name;
#这样不仅可以找到1000的,还有2000,....

注:MySQL中的正则表达式匹配不区分大小写。
为了能够区分大小写,通常使用BINARY

select prod_name
from porducts
where prod_name regexp binary 'JetPack .000';

|功能类似与OR,用于搜索两个串之一。

#匹配1000、2000、3000
select prod_name
from products
where prod_name regexp '1000|2000|3000'

[...] 构成一个字符集,能够匹配上其中的任意一个即可。

select prod_name
from products
where prod_name regexp '[123] ton'
order by prod_name
--可以匹配出含1ton 2ton 3ton的记录

[1-5] 表示范围1~5
[A-Z] 表示范围A~Z

select prod_name
from porducts
where prod_name regexp '[1-3]ton'
order by prod_name
--可以匹配出1ton 2ton 3ton

^ 用于取反

select prod_name
from products
where prod_name regexp '[^123] ton'
order by prod_name
-- 匹配出除了123之外的任何一个

注:使用\\ 匹配特殊字符

-- \\. 表示查找 .
select prod_name
from products
where prod_name regexp '\\.'

定位符
上述的匹配查找 都是匹配一个串中任意位置的文本

元字符说明
^文本的开始
$文本的结束
[[:<:]]词的开始
[[:>:]]词的结尾

问题:查找以一个数(包括以一个小数点开始的数)开始的所有产品

-- 如果简单搜索[0-9\\.],将会在文本中任意位置查找匹配,所以考虑使用定位符^
select prod_name
from products
where prod_name regexp '^[0-9\\.]'
order by prod_name;
--注意 ^放在集合[]中表示否定

LIKEREGEXP 的区别:
LIKE 匹配整个串 而REGEXP用来匹配子串。
REGEXP检查返回值 0(没有匹配),1 (匹配)
SELECT ''HELLO REGEXP '[0-9]'返回0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值