MySQL 基础查询

MySQL数据库 基础查询

MySQL 连表查询及子查询

一 :什么是数据库

1.1 数据库的概念

数据库:是用来组织、存储和管理数据的仓库。
web开发思想

1.2 数据库管理系统

数据库管理系统:(Database Management System):指的是一种操作和管理数据库的大型软件,用于建立、使用和维护数据库以及对数据库惊醒统一的管理和控制,以此来保证数据库的安全性和完整性,用户通过数据库管理系统访问数据库中的数据。

1.3 常见的数据库管理系统

  • Oracle:被认为是业界目前比较成功的关系型数据库管理系统。Oracle数据库可以运行在UNIX、 Windows等主流操作系统平台,完全支持所有的工业标准,并获得最高级别的ISO标准安全性认证。
  • DB2:IBM公司的产品,DB2数据库系统采用多进程多线索体系结构,其功能足以满足大中公司的需要,并可灵活地服务于中小型电子商务解决方案。
  • SQL Server:Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点。
  • PostgreSQL: The World’s Most Advanced Open Source Relational Database
  • Tidb真正意义的分布式数据库

二:MySQL

MySQL是一个关系型数据库管理系统(DataBase Management System,DBMS),由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS(Relational Database Management System,关系数据库管理系统) 应用软件之一。

2.1 安装MySQL

MySQL下载链接

2.2MySQL常用命令L


mysql -h -uroot -p
-- -h指定MySQL服务的ip地址,默认是localhost
-- -u指定用户名
-- -p指定密码

-- 数据库操作
show databases; -- 列出当前数据库服务有哪些可用的数据库
create database <数据库名称> -- 创建数据库
drop database <数据库名称> -- 删除数据库
drop database if exists <数据库名称> -- 如果存在此数据库,删除数据库

-- 数据表操作
show tables;
create table stu(id int,name varchar(20));
drop table stu;
drop table if exists stu;
desc <表名> --描述表的结构


2.3 MySQL的可视化客户端

  • Navicat:Navicat是一套快速、可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。

  • SQLYo:MySQL可能是世界上最流行的开源数据库引擎,但是使用基于文本的工具和配置文件可能很难进行管理。SQLyog提供了完整的图形界面,即使初学者也可以轻松使用MySQL的强大功能。其拥有广泛的预定义工具和查询、友好的视觉界面、类似 Excel 的查询结果编辑界面等优点。

三:SQL

3.1 什么是SQL

SQL(Structured Query Language)结构化查询语言,用于存取数据、更新、查询和管理关系数据库系统的程序设计标准化语言(SQL92\SQL93)

3.2 SQL语言的分类

1、数据查询语言(DQL: Data Query Language):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其它类型的SQL语句一起使用。

2、数据定义语言(DDL:Data Definition Language):其语句包括动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表(CREATE TABLE 或 DROP TABLE);为表加入索引等。

3、数据操作语言(DML:Data Manipulation Language):其语句包括动词INSERT、UPDATE和DELETE。它们分别用于添加、修改和删除。

4、数据控制语言(DCL:Data Control Language):它的语句通过GRANT或REVOKE实现权限控制,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。

四:DQL

4.1 数据准备 导入数据库

1.使用代码导入

source <sql文件路径>;

2.使用可视化软件导入

请添加图片描述

4.2 查询语句

select <字段1,字段2...> from <表名>;

-- 去重查询
select distinct salary from employees; 

-- 给表取别名
select salary as '工资' from employees; 
select salary '工资' from employees; 

-- 条件过滤查询
select <字段1,字段2...> from <表名> where <条件>

-- 比较运算符
-- =  <  >  !=  <> <=  >=
 -- 查询工资大于10000员工
select salary from employees where salary > 10000;

-- 逻辑运算符
-- and(并且) or(或者) not(取反)
select salary from employees where salary > 10000 and department_id = 80;

-- in( , , , )/not in( , , , )
select * from employees where department_id in (10,20,50,90);

-- between ... and ...
select salary from employees where salary between 10000 and 15000;

--模糊查询 %不确定长度和内容  _确定个数但不确定内容
select * from employees where phone_number like '%1234';
select * from employees where phone_number like '515.___.4567';

-- 非空判断 is null / is not null
select * from employees where department_id is null;

--排序查询 order by    asc升序  desc降序 没有定义默认升序
select * from employees where department_id is not null order by department_id desc;

-- 分页查询  limit m,n 跳过m行取n行
select salary from employees where department_id = 50 order by salary desc limit 1,1

4.3 函数(类似Java中的方法)

4.3.1 数字有关的函数
SELECT RAND() FROM DUAL -- 产生[0,1]随机小数
SELECT FLOOR(4.5)  -- 向下取整
SELECT CEIL(4.5)   -- 向上取整 
4.3.2 日期有关的函数
  • datediff、date_add、date_format
SELECT NOW()
SELECT CURDATE()
SELECT CURTIME() -- 当前的时间
SELECT YEAR(NOW()); -- 获取指定日期年份
SELECT MONTH(NOW());--月份
SELECT DAY(NOW()) --日
SELECT HOUR(NOW()) -- 获取小时
SELECT DAYOFMONTH(NOW()) -- 在当前月中的天数
SELECT DAYOFYEAR(NOW())-- 当前年份中的天数
SELECT DAYOFWEEK(NOW()) -- 当前周中的天数  从周日开始

-- 计算两个时间相隔多少天(2022-08-29、2022-08-26 )
SELECT DATEDIFF('2022-08-29','2022-08-26') AS days

-- 计算某个时间的推算(向前、向后)时间
SELECT DATE_ADD(NOW(),INTERVAL 1 DAY)
-- 日期格式化输出
SELECT DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 1 DAY),'%Y-%m-%d')
4.3.3 字符串有关的函数
  • concat
-- 从右边取名字的后4个字母
SELECT RIGHT(last_name,4)
FROM employees 

-- 从左边取名字的前4个字母
SELECT LEFT(last_name,4)
FROM employees 
-- 字符串截取
SELECT SUBSTR('helloword',2,2)

-- 字符串拼接
SELECT CONCAT('hello','-','word')
SELECT CONCAT(first_name,last_name) AS 'fullname'
FROM employees

4.3.4 流程控制有关的函数

-if、if null 、case when

SELECT IF(1=1,'正确','错误')

-- 如果员工有部门标记为正式员工,否则临时工
SELECT last_name, department_id ,
IF(department_id IS NULL,'临时','正式') AS emp_type
FROM employees

SELECT IFNULL(NULL,'空')
SELECT IFNULL('123','空')

SELECT  last_name,IFNULL(commission_pct,'0') FROM employees

-- 查询员工的姓名和工资的等级
-- 15000 A  10000-15000  B   5000-10000 C  5000以下的D
SELECT last_name,salary,
CASE 
WHEN salary>=15000 THEN 'A' 
WHEN salary>=10000 THEN 'B'
WHEN salary>=5000 THEN 'C'
ELSE 'D'
END
FROM employees
4.3.5聚合函数

-count() 求总数、sum() 求和、avg() 求平均值、max() 求最大值、min() 求最小值

 -- 求所有员工最大工资
 SELECT  last_name,MAX(salary)
 FROM employees
 
  -- 求所有员工最小工资
 SELECT  last_name,MIN(salary)
 FROM employees
 
-- 求所有员工平均工资
 SELECT  AVG(salary)
 FROM employees
 
-- 求员工总数
-- count(字段) 如果字段的值为null那么不会统计进去
-- 【强制】不要使用 count(列名)或 count(常量)来替代 count(*),count(*)是 SQL92 定义的
-- 标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。
SELECT COUNT(*)
FROM employees

-- 求工资总和
SELECT SUM(salary) FROM employees
4.3.6 分组聚合
--分组后筛选数据不能用where 用having
select <字段1,字段2...> from <表名> group by <字段> having <条件>-- 查询部门平均工资在10000以上的部门的平均工资
SELECT department_id,AVG(salary) AS 'salary_avg' FROM employees WHERE department_id IS NOT NULL GROUP BY department_id HAVING salary_avg > 10000

MySQL 连表查询及子查询

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值