数据库查询

本文深入解析SQL查询的高级技巧,涵盖数据检索、过滤、排序、分组等关键操作,教你如何利用通配符和正则表达式进行高效数据搜索,以及如何创建计算字段和汇总数据,提升数据处理能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、检索数据

  • 查询结果不包括重复的行 DISTINCT
    SELECT DISTINCT id
    FROM products;
  • (1) LIMIT查询结果不多于5行
    SELECT name
    FROM products
    LIMIT 5;
    (2) 查询结果从第5行开始显示5行(下标从第0行开始)
    SELECT name
    FROM products
    LIMIT 5,5;
  • 按照两个列对结果进行排序
    SELECT id, price, name
    FROM products
    ORFER BY price,name;
    在这里插入图片描述
    DESC 降序
    SELECT price
    FROM products
    ORDER BY price DESC
    LIMIT 1;
    ORDER BY子句对检索出的数据进行
    排序。这个子句必须是SELECT语句中的最后一条子句。

二、过滤数据
加单引号与不加的区别:对字符串类型:加单引号
对数值型:不加
在这里插入图片描述
在这里插入图片描述
空值检查:
SELECT name
FROM products
WHERE price IS NULL;

三、数据过滤
SELECT name, price
FROM products
WHERE id=‘1002’ OR id=‘1003’

优先级:AND>OR, 在处理OR操作符前,优先处理AND操作符
SELECT name, price
FROM products
WHERE (id=‘1002’ OR id = ‘1003’) AND price>=100;

SELECT name, price
FROM products
WHERE id in (‘1002’,‘1003’)
ORDER BY name;

IN和OR功能相当,为什么用IN?
为什么要使用IN操作符?其优点具体如下。
 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观
 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
 IN操作符一般比OR操作符清单执行更快
 IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建
立WHERE子句

四、使用通配符进行过滤
使用通配符搜索速度慢
%: 任意字符,任意多个字符
下划线 _ :匹配一个字符
SELECT id, price
FROM products
WHERE name LIKE ‘jet%’
找出以s起头以e结尾的所有产品:
SELECT id,name, price
FROM products
WHERE name LIKE ‘s%e’;

五、使用正则表达式进行搜索
SELECT name
FROM prodects
WHERE name regexp ‘1000’
ORDER BY name;
正则表达式中 . 匹配任意一个字符
LIKE与REGEXP 在LIKE和REGEXP之间有一个重要的差别。
在这里插入图片描述
如果执行上述两条语句,会发现第一条语句不返回数据,而第
二条语句返回一行。为什么?
LIKE匹配整个串而REGEXP匹配子串
正如第8章所述,LIKE匹配整个列。如果被匹配的文本在列值
中出现,LIKE将不会找到它,相应的行也不被返回(除非使用
通配符)。而REGEXP在列值内进行匹配,如果被匹配的文本在
列值中出现,REGEXP将会找到它,相应的行将被返回。这是一
个非常重要的差别。

正则表达式匹配不区分大小写
| : 表示或者
SELECT name
FROM products
WHERE name REGEXP ‘ycy|hlc’
ORDER BY name;
[ ]: 匹配多个字符之一
SELECT name
FROM prodects
WHERE name REGEXP ‘[123]Tony’
ORDER BY name;
在这里插入图片描述
SELECT name
FROM products
WHERE name REGEXP ‘[1-5] Ton’
ORDER BY name;
在这里插入图片描述
匹配特殊字符
\为前导,\. 匹配.
SELECT name
FROM products
WHERE name REGEXP ‘\.’
ORDER BY name;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
SELECT name
FROM products
WHERE name REGEXP ‘\\( [0-9] stick? \\)’
ORDER BY name;
在这里插入图片描述
SELECT name
FROM products
WHERE name REGEXP ‘[[:digit]]{4}’
ORDER BY name;
类似于:
SELECT name
FROM products
WHERE name REGEXP ‘[0-9][0-9][0-9][0-9]’
ORDER BY name;
定位符
在这里插入图片描述
如果你想找出以一个数(包括以小数点开始的数)开始的所有产品,怎么办?
SELECT name
FROM products
WHERE REGEXP ‘^ [0-9\.]’
ORDER BY name;

六、创建计算字段

拼接字段

字段(field) 基本上与列(column)的意思相同
将name和country的信息按照 name(country) 的形式输出
SELECT Concat(ven_name,’(’,ven_country,’)’)
FROM vendors
ORDER BY name;
在这里插入图片描述
到通过删除数据右侧多余的空格来整理数据,这可以使用MySQL的 RTrim() 函数来完成

使用别名
SELECT Concat(RTrim(ven_name),’(’, RTrim(ven_country),’)’) AS ven_title
FROM vendors
ORDER BY name;
在这里插入图片描述
执行算术计算
SELECT prod_id, quantity,item_price, quantity*item_price AS expanded_price
FROM orderitems
WHERE prod_num = 2005
在这里插入图片描述
在这里插入图片描述
七、使用数据处理函数
函数没有SQL的可移植性强

文本处理函数:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
日期和时间处理函数
在这里插入图片描述
SELECT id, name
FROM orders
WHERE Date(order_date) = ‘2019-07-01’;

SELECT id, name
FROM orders
WHERE Date(order_date) BETWEEN ‘2019-07-01’ AND ‘2019-07-30’;

SELECT id, name
FROM orders
WHERE Year(order_date) = 2019 Month(order_date)= 7;

数值处理函数
在这里插入图片描述
八、汇总数据
聚集函数:
在这里插入图片描述
AVG():
SELECT AVG(price) AS avg_price
FROM products;
COUNT()函数
在这里插入图片描述
SELECT COUNT(cust_email) AS num_cust
FROM customs; 不计算null值
在这里插入图片描述
MAX():需要指定列名,需要返回指定列中最大值
MAX()函数忽略列值为NULL的行。
SELECT MAX(price) AS max_price
FROM products;
在这里插入图片描述
在这里插入图片描述
下面的例子使用AVG()函数返回特定供应商提供的产品的平均价格
它与上面的SELECT语句相同,但使用了DISTINCT参数,因此平均值只
考虑各个不同的价格:

在这里插入图片描述
九、分组数据
SELECT id,COUNT() AS nums
FROM products
GROUP BY id;
在这里插入图片描述
在这里插入图片描述
过滤分组
SELECT id,COUNT(
) AS num
FROM products
WHERE price>2
GROUP BY id
HAVING COUNT( * )>2;
分组和排序

mysql8安装包以及安装说明,在centeros7下的安装.解压缩后会有两个文件:mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar和mysql8安装说明.txt 1、安装 rpm -i 需要安装的包文件名 举例如下: rpm -i example.rpm 安装 example.rpm 包; rpm -iv example.rpm 安装 example.rpm 包并在安装过程中显示正在安装的文件信息; rpm -ivh example.rpm 安装 example.rpm 包并在安装过程中显示正在安装的文件信息及安装进度; 2、查看安装完成的软件 rpm -qa | grep mysql mysql-community-libs-5.7.24-1.el7.x86_64 mysql-community-common-5.7.24-1.el7.x86_64 mysql-community-client-5.7.24-1.el7.x86_64 mysql-community-server-5.7.24-1.el7.x86_64 3、卸载软件 rpm -e --nodeps 要卸载的软件包 rpm -e --nodeps mysql-community-libs-5.7.24-1.el7.x86_64 rpm -e --nodeps mysql-community-common-5.7.24-1.el7.x86_64 rpm -e --nodeps mysql-community-client-5.7.24-1.el7.x86_64 rpm -e --nodeps mysql-community-server-5.7.24-1.el7.x86_64 看看系统中有没有自带有mysql的东西,有就先删除掉。 查看: find / -name mysql 删除: rm -rf 上边查找到的路径,多个路径用空格隔开 #或者下边一条命令即可 find / -name mysql|xargs rm -rf; mkdir -p /usr/local/mysql8 cd /usr/local/mysql8 ll 将下载的资源包(mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar)上传到 usr/local/mysql8 目录下,并解压 tar -xvf mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar 依次安装 rpm -ivh mysql-community-common-8.0.15-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-8.0.18-1.el7.x86_64.rpm rpm -ivh mysql-community-client-8.0.18-1.el7.x86_64.rpm rpm -ivh mysql-community-server-8.0.18-1.el7.x86_64.rpm 查看已安装资源 rpm -qa | grep mysql groupadd mysql useradd -g mysql mysql mysqld --initialize 初始化 chown mysql:mysql /var/lib/mysql -R 授权 systemctl start mysqld 开启mysql服务 systemctl status mysqld 查看mysql 状态 cat /var/log/mysqld.log | grep password 查看root初始密码 使用root用户登录mysql ,并修改root用户密码 mysql -u root -p #回车之后输入前面的初始密码也就是 XXXXXX(填自己的密码) ALTER USER "root"@"localhost" IDENTIFIED BY "自己的密码"; FLUSH PRIVILEGES; #立即生效 再次用户root 用户登录 输入自己刚刚修改的密码就可以了 远程连接 use mysql; update user set host = '%' where user ='root'; ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #更改加密方式 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '自己的密码'; #更新用户密码 (我这里为root )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值