Mysql学习笔记(七)查(补充)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 原文:Mysql学习笔记(七)查(补充)PS:五一还是要学习...虽然有点苦逼..但是路是自己选的,那么自己就要坚持的走下去... 学习内容: 1.数据库查找的补充... 查找涉及的东西比较多,在上一个章节没有完全介绍.
原文: Mysql学习笔记(七)查(补充)

PS:五一还是要学习...虽然有点苦逼..但是路是自己选的,那么自己就要坚持的走下去...

学习内容:

1.数据库查找的补充...

查找涉及的东西比较多,在上一个章节没有完全介绍...我们还是以pet表格为例,在这里进行补充....

模式匹配:

  所谓模式匹配,无非就是按照某种模式进行查找...我们给出的一个模范,然后按照这个模范进行匹配完成的查找就属于模式匹配查找...模式匹配的查找中,我们不能够使用=或!=来操作,应该使用like或not like 进行操作...

 

//查找名字以b开头的宠物...
select * from pet where name like 'b%';
//查找名字以fy结尾的宠物..
select * from pet where name like '%fy';
查找名字里包含w的宠物...
select * from pet where name like '%w%';

 

这类属于的是sql标准的模式匹配..还有另一种类型的匹配属于扩展正则表达式的模式匹配...下面进行简单介绍..

扩展正则表达式的一些字符..

  • '.'匹配任何单个字符..
  • [...]匹配在方括号包括的字符,这个可以是指定值,也可以是一个范围值。。[abc]匹配字符只能有'a','b','c'为命名范围的字符..[a-z]匹配a-z之间为命名范围的字符..
  • '*'匹配0个或者多个*之前的字符..

注意:

  • 如果regexp模式与被测值的任何地方匹配,那么该模式就匹配。。
  • 为了定位一个模式以便它必须匹配测试值的开头或者结尾...该模式开头使用'^',或者结尾使用'$'。。

 

//查找所有以b开头的宠物名字...不区分大小写

select * from pet where name regexp '^b';

//区分大小写...

select * from pet where name regexp BINARY '^b';

//查找以fy结尾的宠物名字...

select * from pet where name regexp 'fy$';

 

计数行:就是使用count(*)函数..

select count(*) from pet;//显示数据库数据的行数..

当我们想要查找一些特定的数据信息的时候..可以使用count(*)函数,配合着group by来进行查询..比如说,我们想要查询宠物猫和狗的数据信息的时候..我们没必要查询整个表,只需要使用count函数配合group by就可以查询的到..

 

select species,sex count(*) from pet where species="dog" or species="cat"group by species,sex;

常用的一些查询的例子:

比如说,我们建立了一个商店的数据库。。。商店里有一些物品,并且每件物品都有一个价值...

 

mysql>create table shop
->(
->       article int(4) unsigned zerofill default '0000' not null,
->       dealer char(20) default '' not null,
->       price double(16,2) default '0.00' not null,
->       primary key(article,dealer)
->);

mysql>insert into shop values(1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C','1.69'),(3,'D',1.25),(4,'D',19.95);

1.查询列的最大值...
select max(article) as article from shop;

2.查询某个列的最大值的一行数据...两种方法..
select article,dealer,price from shop where price=(select max(article) from shop);
select article,dealer,price from shop order by price desc limit;

3.列的最大值,与第一个不一样的地方在于,第一个是显示所有物品里的最大值,这种属于显示每一种物品的一个最大值..
select article max(price) as price from shop order by article;

4.拥有某个字段的组间最大值的行..
select article,dealer,price from shop s1 where price=(select max(s2.price) from shop s2 where s1.article=s2.article);

 

第四条使用临时表的形式也可以做到...

 

CREATE TEMPORARY TABLE tmp 
(
  article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
  price  DOUBLE(16,2)       DEFAULT '0.00' NOT NULL
);
  
  LOCK TABLES article read;
  
  INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP BY article;
  
  SELECT article, dealer, price FROM shop, tmp
  WHERE shop.article=tmp.articel AND shop.price=tmp.price;
  
  UNLOCK TABLES;
  
  DROP TABLE tmp;

 

这个是看别人写的,自己并没有完全弄懂..有兴趣的可以研究研究...还有一种方式:

 

SELECT article,SUBSTRING( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 7) AS dealer, 0.00+LEFT(MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 6) AS price FROM shop
GROUP BY article;

使用用户变量:

如果我们想要找出价格最高和最低的物品..并且还不想保存到客户端的临时变量中时..我们可以使用用户变量...

mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop;
mysql> SELECT * FROM shop WHERE price=@min_price OR price=@max_price;

查询还有使用外键查询。。使用auto_increment查询...自己只是了解,就不在这里班门弄斧了...

 多表查询:

简单的介绍一下多表查询。。。。多表查询涉及的内容很多..在这里只是简单的介绍一下使用select子语句进行查询..

 

CREATE TABLE IF NOT EXISTS contact(  
contact_id int(11) NOT NULL AUTO_INCREMENT,  
user_name varchar(255),  
nom varchar(255),  
prenom varchar(255),  
mail varchar(64),  
passcode char(64),  
PRIMARY KEY(contact_id)  
);  
CREATE TABLE IF NOT EXISTS droit(  
droit_id int( 11 ) NOT NULL AUTO_INCREMENT ,  
droit varchar(255),  
PRIMARY KEY(droit_id)  
);  
CREATE TABLE IF NOT EXISTS contactdroit(  
contactdroit_id int(11) NOT NULL AUTO_INCREMENT,  
contact_id int( 11 ),  
droit_id int( 11 ),  
PRIMARY KEY( contactdroit_id )  
);  
Insert into contact(contact_id, user_name) values(1,'user1');  
Insert into contact(contact_id, user_name) values(2,'user2');  
Insert into contact(contact_id, user_name) values(3,'user3');  
Insert into droit(droit_id, droit) values(1,'admin');  
Insert into droit(droit_id, droit) values(2,'superuser');  
Insert into contactdroit(contact_id, droit_id) values(1, 1);  
Insert into contactdroit(contact_id, droit_id) values(2, 1);  
Insert into contactdroit(contact_id, droit_id) values(3, 2);  
 
SELECT c.contact_id, d.droit_id, d.droit FROM contact c, contactdroit cd, droit d   
where c.contact_id = cd.contact_id  
and cd.droit_id = d.droit_id;  

 

想了解更多的多表查询:http://blog.sina.com.cn/s/blog_6ad62438010168lg.html

 

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
11月前
|
存储 关系型数据库 MySQL
MySQL索引学习笔记
本文深入探讨了MySQL数据库中慢查询分析的关键概念和技术手段。
752 81
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
360 6
|
SQL Oracle 关系型数据库
MySQL学习笔记
MySQL学习笔记
139 0
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
420 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
246 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
210 1
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
205 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
608 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
135 6
|
存储 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
443 4

推荐镜像

更多