MysQL使用一查询
简介
- 查询的基本语法
 
select * from 表名;
- from关键字后面写表名,表示数据来源于是这张表
 - select后面写表中的列名,如果是*表示在结果中显示表中所有列
 - 在select后面的列名部分,可以使用as为列起别名,这个别名出现在结果集中
 - 如果要查询多个列,之间使用逗号分隔
 
消除重复行
- 在select后面列前使用distinct可以消除重复的行
 
select distinct gender from students;
条件
- 使用where子句对表中的数据筛选,结果为true的行会出现在结果集中
 - 语法如下:
 
select * from 表名 where 条件;
比较运算符
- 等于=
 - 大于>
 - 大于等于>=
 - 小于<
 - 小于等于<=
 - 不等于!=或<>
 - 查询编号大于3的学生
 
select * from students where id>3;
- 查询编号不大于4的科目
 
select * from subjects where id<=4;
- 查询姓名不是“黄蓉”的学生
 
select * from students where sname!='黄蓉';
- 查询没被删除的学生
 
select * from students where isdelete=0;
逻辑运算符
- and
 - or
 - not
 - 查询编号大于3的女同学
 
select * from students where id>3 and gender=0;
- 查询编号小于4或没被删除的学生
 
select * from students where id<4 or isdelete=0;
模糊查询
- like
 - %表示任意多个任意字符
 - _表示一个任意字符
 - 查询姓黄的学生
 
select * from students where sname like '黄%';
- 查询姓黄并且名字是一个字的学生
 
select * from students where sname like '黄_';
- 查询姓黄或叫靖的学生
 
select * from students where sname like '黄%' or sname like '%靖%';
范围查询
- in表示在一个非连续的范围内
 - 查询编号是1或3或8的学生
 
select * from students where id in(1,3,8);
- between ... and ...表示在一个连续的范围内
 - 查询学生是3至8的学生
 
select * from students where id between 3 and 8;
- 查询学生是3至8的男生
 
select * from students where id between 3 and 8 and gender=1;
空判断
- 注意:null与''是不同的
 - 判空is null
 - 查询没有填写地址的学生
 
select * from students where hometown is null;
- 判非空is not null
 - 查询填写了地址的学生
 
select * from students where hometown is not null;
- 查询填写了地址的女生
 
select * from students where hometown is not null and gender=0;
优先级
- 小括号,not,比较运算符,逻辑运算符
 - and比or先运算,如果同时出现并希望先算or,需要结合()使用
 
聚合
- 为了快速得到统计数据,提供了5个聚合函数
 - count(*)表示计算总行数,括号中写星与列名,结果是相同的
 - 查询学生总数
 
select count(*) from students;
- max(列)表示求此列的最大值
 - 查询女生的编号最大值
 
select max(id) from students where gender=0;
- min(列)表示求此列的最小值
 - 查询未删除的学生最小编号
 
select min(id) from students where isdelete=0;
- sum(列)表示求此列的和
 - 查询男生的编号之后
 
select sum(id) from students where gender=1;
- avg(列)表示求此列的平均值
 - 查询未删除女生的编号平均值
 
select avg(id) from students where isdelete=0 and gender=0;
分组
- 按照字段分组,表示此字段相同的数据会被放到一个组中
 - 分组后,只能查询出相同的数据列,对于有差异的数据列无法出现在结果集中
 - 可以对分组后的数据进行统计,做聚合运算
 - 语法:
 
select 列1,列2,聚合... from 表名 group by 列1,列2,列3...
- 查询男女生总数
 
select gender as 性别,count(*)
from students
group by gender;
- 查询各城市人数
 
select hometown as 家乡,count(*)
from students
group by hometown;
分组后的数据筛选
- 语法:
 
select 列1,列2,聚合... from 表名
group by 列1,列2,列3...
having 列1,...聚合...
- having后面的条件运算符与where的相同
 - 查询男生总人数
 
方案一
select count(*)
from students
where gender=1;
-----------------------------------
方案二:
select gender as 性别,count(*)
from students
group by gender
having gender=1;
对比where与having
- where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
 - having是对group by的结果进行筛选
 
排序
- 为了方便查看数据,可以对数据进行排序
 - 语法:
 
select * from 表名
order by 列1 asc|desc,列2 asc|desc,...
- 将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推
 - 默认按照列值从小到大排列
 - asc从小到大排列,即升序
 - desc从大到小排序,即降序
 - 查询未删除男生学生信息,按学号降序
 
select * from students
where gender=1 and isdelete=0
order by id desc;
- 查询未删除科目信息,按名称升序
 
select * from subject
where isdelete=0
order by stitle;
获取部分行
- 当数据量过大时,在一页中查看数据是一件非常麻烦的事情
 - 语法
 
select * from 表名
limit start,count
- 从start开始,获取count条数据
 - start索引从0开始
 
示例:分页
- 已知:每页显示m条数据,当前显示第n页
 - 求总页数:此段逻辑后面会在python中实现
- 查询总条数p1
 - 使用p1除以m得到p2
 - 如果整除则p2为总数页
 - 如果不整除则p2+1为总页数
 
 - 求第n页的数据
 
select * from students
where isdelete=0
limit (n-1)*m,m
												
											MysQL使用一查询的更多相关文章
- 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序
		
前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来 ...
 - MySQL 清空慢查询文件
		
标签:配置慢查询 概述 本章主要写当慢查询文件很大的时候怎样在线生成一个新的慢查询文件. 测试环境:mysql 5.6.21 步骤 配置慢查询 默认的my.cnf文件在/etc/目录下 vim /et ...
 - PHP慢脚本日志和Mysql的慢查询日志
		
1.PHP慢脚本日志 间歇性的502,是后端 PHP-FPM 不可用造成的,间歇性的502一般认为是由于 PHP-FPM 进程重启造成的. 在 PHP-FPM 的子进程数目超过的配置中的数量时候,会出 ...
 - MySQL知识树-查询语句
		
在日常的web应用开发过程中,一般会涉及到数据库方面的操作,其中查询又是占绝大部分的.我们不仅要会写查询,最好能系统的学习下与查询相关的知识点,这篇随笔我们就来一起看看MySQL查询知识相关的树是什么 ...
 - MySql的连接查询
		
类似于oracle的连接查询,mysql连接查询也有左外连接.右外连接.内连接查询.但是,不同的是没有直接 的全外连接查询. 这里介绍MySql的连接查询: 这里已两张表为例:STUDENT 表 和 ...
 - MySQL查询优化:查询慢原因和解决技巧
		
在开发的朋友特别是和mysql有接触的朋友会碰到有时mysql查询很慢,当然我指的是大数据量百万千万级了,不是几十条了,下面我们来看看解决查询慢的办法. MySQL查询优化:查询慢原因和解决方法 会经 ...
 - MYSQL的慢查询两个方法
		
对于排查问题找出性能瓶颈来说,最容易发现并解决的问题就是MYSQL的慢查询以及没有得用索引的查询. ================================================== ...
 - mysql in 子查询 效率慢 优化(转)
		
mysql in 子查询 效率慢 优化(转) 现在的CMS系统.博客系统.BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下.但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久! ...
 - MYSQL随机抽取查询 MySQL Order By Rand()效率问题
		
MYSQL随机抽取查询:MySQL Order By Rand()效率问题一直是开发人员的常见问题,俺们不是DBA,没有那么牛B,所只能慢慢研究咯,最近由于项目问题,需要大概研究了一下MYSQL的随机 ...
 - mysql笔记03   查询性能优化
		
查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...
 
随机推荐
- R中利用SQL语言读取数据框(sqldf库的使用)
			
熟悉MySQL的朋友可以使用sqldf来操作数据框 # 引入sqldf库(sqldf) library(sqldf) # 释放RMySQL库的加载(针对sqldf报错) #detach("p ...
 - Net Core MVC6 RC2 启动过程分析
			
入口程序 如果做过Web之外开发的人,应该记得这个是标准的Console或者Winform的入口.为什么会这样呢?.NET Web Development and Tools Blog ASP.NET ...
 - [linux][shell]负载均衡下多个服务器代码同步方案
			
说明: 服务器是腾讯的云服务器(腾讯用的是linux container),远程登陆云服务器需要使用代理,在服务器中不能访问外网,所以当时也就没有去想做svn 需求: 1. 把同样的代码同步到不同的服 ...
 - 网络编程 - socket通信/粘包/文件传输/udp - 总结
			
socket通信 1.简单的套接字通信 import socket phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) phone.bin ...
 - LeetCode_Search in Rotated Sorted Array
			
题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 ...
 - Fractal---poj2083(递归和普通方法打印图形)
			
题目链接:http://poj.org/problem?id=2083 这题不能用G++提交... 见到两次知道有递归的写法,然而并不会,这次发现并不难: #include<stdio.h> ...
 - oracle查看被锁的表和被锁的进程,杀掉进程
			
-- 1. 查看被锁的表 SELECT p.spid, a.serial#, c.object_name, b.session_id, b.oracle_username,b.os_user_name ...
 - 360UI 界面框架 即QUI框架与EXT比较
			
EXTJS框架是非常全面和成熟的,这是因为它发展的年头久远,并且有全世界的EXTJS爱好者为其出谋献策,它的组件库尤其是DataGrid组件无人能出其右.我在最初也考虑过使用EXTJS来做项目,学习了 ...
 - php使用amqplib方式使用rabbitmq
			
安装 sudo apt-get install php sudo apt-get install rabbitmq-server sudo apt-get install php-bcmath php ...
 - JDB调试代码 20165324 何春江
			
Java书本程序调试: 课上程序调试