MySQL学习记录

前提:
数据库:books
里面有table:
customers
orders

选择数据库
use books

查询所有表格
show tables
查询单个表格
select × from orders
查询表格的数据类型
show create table orders

修改数据类型
alter table orders modify id vaechar(20)

增加两行数据
insert into orders values(‘‘,‘‘,‘‘,‘‘),(‘‘,‘‘,‘‘,‘‘)
增加特定位置的数据
insert into orders(amount) values(‘45.45‘)

修改数据
update orders set date=‘2000-02-02‘ where orderid=1;

五种统计函数
(1)max:求最大值
select max(goods_price) from goods
这里会取出最大的价格的值,只有值

#查询每个栏目下价格最高的
select cat_id,max(goods_price) from goos group by cat_id;

#查出价格最高的商品编号
select goods_id,max(goods_price) from goods group by goods_id;
(2)min:求最小值
(3)sum:求总数和
(4)avg:求平均值
(5)count:求总行数
#求每个栏目下商品种类
select count(*) from goods;

可以给结果取别名(as)

select amount-orderid as distance from orders;

-----------------------------
(1)where
(2)having
(3)group by
(4)order by
(5)limit

(--1)where

where price>=100 and price<=200 or price>=500 and price<=800

(--2)having
where针对表中的列发挥作用,用于查询表格
having对查询结果中的列发挥作用,用于筛选结果

#查询本店商品价格比市场价低多少钱,输出低200元以上的商品
select goods_id,good_name,market_price - shop_price as s from goods having s>200 ;
//这里不能用where因为s是查询结果,而where只能对表中的字段名筛选
如果用where的话则是:
select goods_id,goods_name from goods where market_price - shop_price > 200;

综合应用,例如:
#查询两门及两门以上科目不及格的学生的平均分
思路:
#先计算所有学生的平均分
select name,avg(score) as pj from stu group by name;
#查出所有学生的挂科情况
select name,score<60 from stu;
#这里score<60是判断语句,所以结果为真或假,mysql中真为1假为0
#查出两门及两门以上不及格的学生
select name,sum(score<60) as gk from stu group by name having gk > 1;
#综合结果
select name,sum(score<60) as gk,avg(score) as pj from stu group by name having gk>1;

(--3)group by
group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。
SELECT子句中的列名必须为分组列或列函数。列函数对于GROUP BY子句定义的每个组各返回一个结果。

某个员工信息表结构和数据如下:
id name dept salary edlevel hiredate
1 张三 开发部 2000 3 2009-10-11
2 李四 开发部 2500 3 2009-10-01
3 王五 设计部 2600 5 2010-10-02
4 王六 设计部 2300 4 2010-10-03
5 马七 设计部 2100 4 2010-10-06
6 赵八 销售部 3000 5 2010-10-05
7 钱九 销售部 3100 7 2010-10-07
8 孙十 销售部 3500 7 2010-10-06
想列出每个部门最高薪水的结果,sql语句如下:

SELECT DEPT, MAX(SALARY) AS MAXIMUM
FROM STAFF
GROUP BY DEPT
查询结果如下:
DEPT MAXIMUM
开发部 2500
设计部 2600
销售部 3500

(--4)order by

Order by语句是用来排序的,经常我们会使用到Order by来进行排序

(--4.1)desc 降序
select * from orders order by amount desc;// 降序排列amount

(--4.2) rand() 随机
select * from orders order by rand() limit 3; // 随机选择3行数据

(--5)limit

Mysql中limit的用法:在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已

经为我们提供了这样一个功能。 SELECT*FROMtableLIMIT[offset,]rows|rowsOFFSEToffset LIMIT 子句可以被用于强制 SELECT

语句返回值

select * from orders order by amount limit 4 // 检索前 4 个
select * from orders order by amount limit 4,6 // 检索从4开始,一共6个// 第二个参数是数量

(--6)字段联合

concat:将字段合并后返回查询

select concat(emp_id," ",emp_name) from emp;

---------------------------------
高级查询内容

----子查询(括号里面的查询),是嵌套查询必不可少的部分。
(1)where子查询(把内层查询结果当作外层查询的比较条件)
(2)from型子查询(把内层的查询结果供外层再次查询)
(3)exists型子查询(把外层查询结果拿到内层,看内层的查询是否成立)

----Union用法
UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。
UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。
默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL;

----Join的类型
1. 内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。
2. 外联结:分为外左联结和外右联结。

内连结:
SELECT * FROM java JOIN mysql ON java.name=mysql.name;

select * from java,mysql where java.name=mysql.name;
SELECT * FROM java JOIN mysql ON java.name=mysql.name;
SELECT * FROM java INNER JOIN mysql ON java.name=mysql.name;
SELECT * FROM java CROSS JOIN mysql ON java.name=mysql.name;
SELECT * FROM java STRAIGHT_JOIN mysql ON java.name=mysql.name;

·table_reference条目中的每个逗号都看作相当于一个内部联合
·默认的JOIN都是INNER JOIN
·CROSS JOIN从语法上说与INNER JOIN等同
·STRAIGHT_JOIN与JOIN相同。除了有一点不一样,左表会在右表之前被读取。
STRAIGH_JOIN可以被用于这样的情况,即联合优化符以错误的顺序排列表。

外连结-左连结
以左侧table为根本,如果右侧table中有与左侧table相同的,则给出结果;没有则标记NULL;
SELECT * FROM java LEFT JOIN mysql ON java.name=mysql.name;

+-------+------+
| name | name |
+-------+------+
| java1 | NULL |
| java2 | NULL |
| blue | blue |
+-------+------+

外连接-右连结
SELECT * FROM java RIGHT JOIN mysql ON java.name=mysql.name;

+------+--------+
| name | name |
+------+--------+
| NULL | mysql1 |
| NULL | mysql2 |
| blue | blue |
+------+--------+

时间: 2024-10-11 18:29:12

MySQL学习记录的相关文章

Mysql 学习记录

( xampp 的mysql 与 直接用 dnf 安装的 mysql 有冲突! ) 1. 数据库基本知识: 一张表的行 又称为 记录 一张表的列 又称为 字段 表结构:所有字段,规定了你的每一条记录所应该填的内容,不能随意乱写 2.mysql 登录: mysql -u root -p password (root密码) (待继续更新)

mysql 学习记录(二十五)--mysql日志

一.理论: 1.错误日志: a.记录了mysqld启动和停止时以及出错时的相关信息,当数据库出现故障导致无法启动时可以先查看此信息. b.可用--log-error来指定mysqld保存错误日志文件的位置 2.二进制日志: a.statement:记录的都是语句.优点:日志记录清晰易读.日志量少.对I/O影响较小,缺点:在某些情况下slave的日志复制会出错 b.row:将每一行的变更记录到日志中,而不是记录sql语句.优点:记录每一行的数据变化细节,不会出现某些情况下无法复制的情况,缺点:日志

MySQL学习记录一

1.MySQL join操作 left join以左表为基础,其记录会全部表示出来,而右表只显示满足搜索条件的记录.right join以右表为基础,其记录会全部显示出来,而左表只显示满足搜索条件的记录.下面先创建两个表进行测试,表a包含ID(aID)以及姓名(aName),表b包含ID(bID)以及学号(bNum). 图1 从上图可以看出,表格创建成功并插入了几条数据.下面开始测试左连接.右连接,结果如图2所示. 图2 从图2可以看出,左连接时,以表a为基础,共5条记录.结果中,表b只显示a.

MySQL学习记录--分组与聚集

一.group by 子句 group by 字句可对数据进行分组. 以MySQL5.5的sakila数据库中的film数据表举例:查找出各个电影等级的电影总数 mysql>SELECT rating, COUNT(*) AS ratingCount FROM film > GROUP BY rating 结果如下: 可以看出,group by 子句对其后接的字段进行了分组,而这里也用了聚集函数count()对各分组中的项目数进行统计. 二.聚集函数 由上例可以知道,聚集函数是对某个分组的所有

MySQL学习记录--操作时间数据

1.返回日期的时间函数 date_add() : 可以为指定日期增加/减少任意一段时间间隔.下面举例将当前日期增加一个月和减少一个月 mysql> select date_add(current_date(), interval 1 month) as add_one_month; +---------------+ | add_one_month | +---------------+ | 2016-12-30 | +---------------+ 1 row in set (0.00 se

mysql学习记录(一)

一.cmd操作mysql 1.进入mysql mysql -h localhost -u root -p + enter >enter password:root 2.简单mysql命令 create database db_name create table table_name(field_name field_type) show databases/tables describe table_name 2.sql文件导入导出 导入:source file_path 导出:mysqldum

【MySQL】Linux MySQL学习记录

1.查看日志存放路径 show variables like 'general_log_file'; 2.查看日志是否开启 show global variables like 'log_bin%';

mysql学习记录(二)

一.索引 创建:create index index_name on table_name(field) 删除:drop index index_name on table_name 二.约束 create table tablename(field_name field_type {not null,unique,check(filed>0),primary key auto_increment,constraint constraint_name foreign key reference

MySQL学习记录-group_concat

group_concat的用法: 可以配合group by来使用. select group_concat(column name1 separator ';') from tablename group by column name2; 解释: 按照column name2进行分组,然后将column name1的数据用分号隔开(默认分隔符为逗号),给出结果: