Mysql

分组统计数量(含限制):

select count(xx) as t from table group by xx having t >n;   -- 表按xx分组,并筛选xx大于n的东西,注:

SQL语言中设定集合函数的查询条件时使用HAVING从句而不是WHERE从句。

 

选取中间几行

select * from table where limit 1,3; (从第2行开始,选取3行)

select emp_no,salary
from salaries
where to_date='9999-01-01'
order by salary desc
limit 1,1

 

一.SQL查询相关

  1. 多条件用and连接
  2. 包含用in,不包含用not in
  3. 多表关联查找,先选出查询的信息,然后通过关联字段(字段 =,字段 in(selete...))嵌套selete语句,或者用join ..on..
  4.  
  • 1.where和having,having用于非字段内容选择,如sum(score),count(s_id)等

where+数字表达式,不用引号;字符就要引号

SELECT * FROM Persons WHERE FirstName='Bush'

SELECT * FROM Persons WHERE Year>1965

# having的用法
-- 11、查询没有学全所有课程的同学的信息 

select s.* from student s 
left join Score s1 on s1.s_id=s.s_id
group by s.s_id having count(s1.c_id)<(select count(*) from course)
 
  • 2.and和or

一起使用时,用圆括号

SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'
  • 3.order by 和 group by,group by分组完之后可以继续order by进行数据排序

order:可以后接多个列名,先按第一排,然后再第一个排好的基础上排序第一个重复行;

默认升序排列

group:分组,然后统计小组内的sum,count,max

# order by
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

# group by,按相同的customer分组,然后统计价格的和,相当于另类去重了
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer ORDER BY Customer ASC
  • 4.insert into
# 插入指定数据列
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

#插入一列完整数据
INSERT INTO table_name VALUES (列1, 列2,...)
  • 5.delete
# 删除所有行
DELETE FROM table_name

# 删除某一行
DELETE FROM table_name WHERE ...
  • 6.like 通配符

%:替代1或多个字符

_:替代一个字符

[char]:char为一个或多个字符,意思为匹配其中的一个任意字符

[!char]:非

# 开头为任意字符,然后匹配一个A/L/N,然后就任意一或多个字符
SELECT * FROM Persons WHERE City LIKE '_[ALN]%'
  • 7.between. ..and..

不同数据库对这个开闭区间不同,有的是[..], (..), [..)

 

  • 8.as

as可省略,对于表的别名,作用是书写简单,对于同个表,可以命名不同以作区分;

对于列的别名,简单书写,并显示在查询出来的结果集中

SELETE a.username as u,b.password as p FROM user as a, user as b 
WHERE a.password='xx' and b.username='xx'
  • 9.join,left join,right jion (表名) on (on一定要与主表用等号关联,然后用and连接其他(主表和jion表的字段),不能涉及其他表条件,一般为‘=’‘<’">",只是连接表的作用不进行表直接的数据对比,对比要使用where),有异议
  • 注:一个join只能连接一个表,连接多表需要使用多个join且要注意顺序

JOIN: 如果表中有至少一个匹配,则返回行,                        交集

LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行   左边与交集

RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行 右边与交集

FULL JOIN: 只要其中一个表中存在匹配,就返回行               全集

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

# 可用and代替

# join on起连接作用,不起表之间的对比作用
SELECT a.s_id,a.`s_name`, b.s_score AS 01_score,c.s_score AS 02_score FROM student a 
 JOIN score b ON a.`s_id`=b.`s_id` AND b.c_id='01' 
 LEFT JOIN  score c ON a.`s_id`=c.`s_id` AND c.c_id='02' OR c.`c_id`=NULL
 WHERE c.`s_score`>b.`s_score` 
  • 10.union与union all

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。union有去重的作用,union all全部集合

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

# E_Name这列要数据类型要相同,union连接两个selete多少列要一样
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA
  • 11.函数

AVG():某列的平均值

SUM():某列的和

COUNT():某列的行数,不包括空值

MAX():某列的最大值

MIN():某列的最小值

注意:当被WHERE选择后,某列仅代表被选择的数据,不是代表全列

# 现在,我们希望找到 OrderPrice 值高于 OrderPrice 平均值的客户
SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
  • 12.优先级,括号
 insert into tb11 (select * from tb6)
  • 13.'='与in

=:等于某个值,仅有这个,等号不能三连等,要用and连接

in:等于某一组,多个,不包含用not in

# = 与 in 后面均可接selete语句,用括号
selete id form stu where name='张三'
selete id form stu where name in ('张三','李四')


-- 7、查询学过"张三"老师授课的同学的信息 
select a.* from 
	student a 
	join score b on a.s_id=b.s_id where b.c_id in(
		select c_id from course where t_id =(
			select t_id from teacher where t_name = '张三'));


#  等号不能连等
-- 9、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息

select a.* from 
	student a,score b,score c 
	where a.s_id = b.s_id  and a.s_id = c.s_id and b.c_id='01' and c.c_id='02';

 

  • 14.distinct 去重

 

二.SQL内置函数

菜鸟教程sql

information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库。其中 performance_schema 用于性能分析,而 information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。
 

select TABLE_NAME, concat(truncate(data_length/1024/1024,2),' MB') as data_size,
concat(truncate(index_length/1024/1024,2),' MB') as index_size
from information_schema.tables where TABLE_SCHEMA = 'shdx'
group by TABLE_NAME
order by data_length desc;

# TABLE_NAME,data_length是数据库系统表information_schema的字段,可以查询自定义表的大小。

关于Mysql系统表和性能表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值