目录
- 一、简介/入门
- 二、登入数据库、选中表、查看表信息
- 三、创建数据库和表
- 六、普通查询数据
-
- 6.1 查询单个列/属性
- 6.2 查询指定的多个列/属性 ,或所有列
- 6.3 查询指定某列样本返回的是集合(set)/去重
- 6.4 查询满足指定条件下的样本记录 where
- 6.5 查询样本时按照指定的顺序进行排序 order by
- 6.6 查询满足某个条件的样本的个数 统计(count)
- 6.7 查询表中某个属性最大值的样本
- 6.8 查询样本时限制返回的数目 #num1可省,默认从0起始位置开始
- 6.9 指定模式查询样本 like
- 6.10 查询某类分组样本的平均数
- 6.11 分组按照条件查询 (group by 后面要跟条件用的是having不是where)
- 6.12 查询某属性是空值/非空的样本 is null/ is not null
- 查询工号为176的员工的姓名和部门号和年薪
- 七、函数查询
- 八、分组查询group by (59)
- 九、连接查询/多表查询
- 十、子查询
- A.数据类型附表
一、简介/入门
1.1 安装
安装向导:https://www.runoob.com/mysql/mysql-install.html 此电脑MySQL账户名cjr
安装带有管理器的版本https://dev.mysql.com/downloads/installer/
https://www.runoob.com/w3cnote/windows10-mysql-installer.html
1.2 简介:
数据库的好处:
1.可以持久化存储数据到本地
2.结构化查询
DB:Database,存储数据的仓库,保存了一系列有组织的数据
DBMS:Database Management System 数据库管理系统,数据库是通过DBMS创建和操作的
常见DBMSL: MySQL,Oracle,DB2(适合海量数据),SqlServer(只能安装在windows下)
SQL:Structured Query Language,结构化查询语言,专门用来与数据库通信的语言
优点:
1.3 MySQL数据
存储在我的坚果云中的Mysql文件夹中
1.4着重号的使用
feature_name
`` 数字1左边的那个键就是着重号,如果一个属性名称跟系统自带的字段相同,可加着重号做区分
1.5 SQL查询常量、表达式、函数
select 100;
select 'john';
select version();
1.6 给查询的结果起别名
起别名的好处
- 便于理解
- 如果查询的字段有重名,可以用别名区别开来
起别名的方式
- 用 as
- 用空格
select 100 as 结果;
select version() as 版本;
select 'john' 名字; #直接空格隔开
select salary as 薪水 from employees;
1.7 +加号的作用
在MySql中 + 号只有一个作用:运算符
- 两个变量都是数值型,做加法运算
select 60+80;
return 140
- 两个变量其中一个是数值型,另一个是字符串格式的数值,就会试图将字符型的数字转换成数值型
select '100'+20;
return 120
- 如果字符型变量无法转换成数值型,那么就把他变成0
select 'john' + 20;
return 20
- 只要其中一个变量为null,结果都会为null
select null + 20;
return null
1.8 concat() 拼接字符串
select concat('a','b','c');
return abc
例子:
select first_name,last_name,concat(first_name,' ',last_name) as full_name from employees;
1.9 处理null,IFNULL
如果某一列中有很多null,如果跟其他列用concat合并,返回的只会是null。要用ifnull
来处理``
ifnull(feature_name,value)
如果feature_name是null,返回设置的value值
例子:
select concat(first_name,',',last_name,',', ifnull(commission_pct,0)) as out_put from employees;
1.10 mysql服务的启动
方式一:通过命令行:cmd net start 服务名
net stop 服务名
方式二:计算机–右键–管理–服务
二、登入数据库、选中表、查看表信息
2.1 登入退出
本机登录
# mysql -uusername -ppassword
mysql -uroot -pcjrxxxxxxx
联机
mysql -h主机名 -P端口号 -u用户民 -p密码
#退出
exit;
2.2 查询数据库服务器中有哪些数据库
show databases; #先看有哪些数据库
2.3 选中某个数据库 (use database_name;)
#选择要操作的Mysql数据库,使用该命令后所有Mysql命令都只针对该数据库
use cjrtest;
2.4 显示指定数据库下的所有表
#显示指定数据库的所有表
show tables from database_name;
#显示当前数据库下的所有表
show tables;
2.5 显示表的属性(features,attributes)信息
#显示数据表的属性,属性类型,主键信息 是否为 NULL,默认值等其他信息。
show columns from cjrtest;
2.6 显示数据表的详细索引信息
show index from table_name;
2.7 查看表格结构
跟show columns from table_name; 几乎一样
describe table_name;
2.8 查看表格里的所有样本
select * from table_name;
2.9 查看数据库中所有表的状态
show table status from database_name;
show table status from database_name like 'country%'; #查询表格名称以country开头的表的信息
show table status from database_name like 'country%'\G; # 加上 \G,查询结果按列打印
2.10 查看当前所在哪个database
select database();
2.11 查看当前MySQL是什么版本
select version();
第二种方法:
还没登陆mysql时,在cmd输入mysql --version
三、创建数据库和表
3.1 创建数据库
create database database_name;
3.2 创建数据表
CREATE TABLE table_name(
feature_name1 type,
feature_name2 type,
feature_name3 type,
.............);
例1:
CREATE TABLE pet(
name VARCHAR(20),
owner VARCHAR(20),
species VARCHAR(20),
sex CHAR(1),
birth DATE,
death DATE);
例2:有设置默认值
create table cjrtest(
id int primary key auto_increment,
name varchar(10) not null default '',
gender char(1) not null default '',
company varchar(20) not null default '',
salary decimal(8,2) not null default 0.00,
meal smallint not null default 0)
3.3 添加数据记录/样本
insert into table_name
(feature1,feature2,feature3,feature4..)
values
(value1,value2,value3,value4…)
例子:
insert into cjrtest
(id,name,gender,company,salary,meal) #可省略,也可选择特定的属性
values
(1,'cjr','男','Alibaba',16000.00,2000),
(2,'lsq','女','Baidu',15000,213),
(3,'zjm','女','Pupu',14000,321),
(4,'Ld','男','Aoda',9210,321),
(5,'Sa','男','Jingdong',8321,231),
(6,'Jin','女','Meituan',3012,398);
3.4 创建表约束
六、普通查询数据
6.1 查询单个列/属性
select column_name from table_name;
6.2 查询指定的多个列/属性 ,或所有列
select column_name1,column_name2... from table_name;
# 查询所有列
select * from table_name;
6.3 查询指定某列样本返回的是集合(set)/去重
只能加一个属性
select distinct column_name from table_name;
例子:查询employees表格中部门编号,去重的
select distinct department_id from employees;
6.4 查询满足指定条件下的样本记录 where
select */column_name,... from table_name where feature operator value;
此处operator是运算符:
-
条件运算符:=、>=、<=、<、>;不等于的符号!=或<>;
-
逻辑运算符:and、or、not 对应的符号: &&、 ||、 !
-
模糊查询:
- between:在某个范围内 (between x and y);
- like:搜索某种模式
- in: 指定值在某个集合里 (in (200,300,400)) in类似于=,但可指定多个值
6.4.1 条件运算符举例
- 查询工资大于12000的员工信息 ,属性:salary, 表格employees
select * from employees where salary > 12000;
- 查询 部门编号不等于90的员工名和部门编号
select concat(first_name,' ',last_name) as full_name, department_id from employees where department_id !=90;
6.4.2 逻辑运算符案例
and or not 逻辑运算符的作用就是用来连接条件运算符
- 查询工资在10000到20000之间的员工名、工资、奖金
select
concat(first_name,' ',last_name) as full_name,
salary,
commission_pct
from
employees
where
salary>10000 and salary<20000;
2. 查询部门编号不在90-110之间,或工资高于15000的员工信息
select
*
from
employees
where
not (department_id >=90 and department_id <=100) or salary >15000;
6.4.3 Between and
查询部门编号在90-120之间的样本 [90,120]包含90,120临界值; 90<=x<=120
select
*
from
employees
where
department_id between 90 and 120;
6.4.4 使用in查询某个属性的多个值
查询工作名(job_id)称为’IT_PROG’或’FI_MGR’ 的样本
select * from employees where job_id in ('IT_PROG','FI_MGR');
#等于
select * from employees where job_id='IT_PROG' or job_id='FI_MGR';
6.5 查询样本时按照指定的顺序进行排序 order by
order by 字句一般放在查询语句的最后,limit字句除外
select */column_name from table_name order by column_name ASC/DESC;
# ORDER BY 多列的时候,先按照第一个column name排序,在按照第二个column name排序;
select */column_name from table_name order by column_name ASC/DESC,column_name ASC