1_12mysql的常见命令
DBMS分为两类:
-基于共享文件系统的DBMS(Access)
-基于客户机-服务器的DBMS(MySql,Oracle,sqlserver)
mysql的启动和停止服务:
停止mysql服务:
net stop mysql
启动mysql服务:
net start mysql
mysql的登陆和退出:
进入mysql:
mysql -h localhost -P 3306 -u root -p111(111是我设置的密码)
并且-p和密码之间不能有空格
mysql -u -p111(这样也可以)
mysql [-h主机名 -P端口号] -u用户名 -p密码
本机可省略
退出mysql:
exit和quit
mysql的常见命令汇总:
1.查看当前所有的数据库
show databases;
2.打开指定的库
use databases;
3.查看当前库的所有表
show tables
4.查看其它库的所有表
show tables from 库名;
5.创建表
create table 表名(
列名 列类型,
列名 列类型,
...
);
6.查看表结构
desc 表名
7.查看服务器的版本
mysql>select version();
mysql的常见命令:
show databases;(mysql命令以分号结尾)
+--------------------+
| Database |
+--------------------+
| information_schema |(保存原数据信息)
| mysql |(
| performance_schema |(性能信息)
| test |(空的没有表)
+--------------------+
use test(指定的库名);
Database changed
show tables;
show tables from mysql;(并没有进入mysql库)
(表) (数据库名称)
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| servers |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
select database();<<查看当前所在的库>>
+------------+
| database() |
+------------+
| test |
+------------+
1 row in set (0.00 sec)
(表名自己定义)
create table stuinfo(
->id int,
->name varchar(20));
Query OK, 0 rows affected (0.02 sec)
show tables;
+----------------+
| Tables_in_test |
+----------------+
| stuinfo |
+----------------+
1 row in set (0.00 sec)
desc stuinfo;(看表的结构)
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.02 sec)
select * from stuinfo;(*代表所有,及所有存在于stuinfo的数据)
Empty set (0.00 sec)
insert into stuinfo(id,name) values(2,'rose');
+------+------+
| id | name |
+------+------+
| 1 | john |
| 2 | rose |
+------+------+
2 rows in set (0.00 sec)
update stuinfo set name='lilei' where id=1;
+------+-------+
| id | name |
+------+-------+
| 1 | lilei |
| 2 | rose |
+------+-------+
2 rows in set (0.01 sec)
delete from stuinfo where id=1;
+------+------+
| id | name |
+------+------+
| 2 | rose |
+------+------+
1 row in set (0.00 sec)
select version();(查看mysql的版本)
+-----------+
| version() |
+-----------+
| 5.5.62 |
+-----------+
1 row in set (0.00 sec)
========================================================================================================================================================================================================================================================================
2_15mysql语法规范介绍
mysql
1.不区分大小写,但建议关键字大写,表名,列名小写
2.每条命令最好用分号结尾
3.每条命令根据需要,可以缩进,换行
4.注释
--单行注释:#注释文字
--单行注释:-- 注释文字(注意有空格)
--多行注释:/* 注释文字 */
========================================================================================================================================================================================================================================================================
3_17图形化用户界面客户端的介绍
在这里插入代码片
========================================================================================================================================================================================================================================================================
4_18四种表达介绍
employees 员工表
栏位:
employee_id int(6) 员工编号
first name, varchar (20), Nullable 名
last name, varchar(25), Nullable 姓
email, varchar(25), Nullable 邮箱
phone number, varchar(20), Nullable 电话号码
job id, varchar(10) Nullable 工种编号
salary, double(10,2), Nullable 月薪
commission pct, double(4, 2), Nullable 奖金率
manager id, int(6), Nullable 上级领导的员工编号
department_id, int(4), Nullable 部门编号
hiredate, datetime, Nullable 入职日期
departments 部门表
栏位
department_id, int(4) 部门编号
department name, varchar(3), Nullable 部门名称
manager id int(), Nullable 部门领导的员工编号
location id, int(4), Nullable 位置编号
locations 位置表
栏位
location id, int(11) 位置编号
street_ address, varchar(40), Nullable 街道
postal_code, varchar(12), Nullable 邮编
city, varchar(30), Nullable 城市
state province, varchar(25), Nullable 州/省
country_id, varchar(2), Nullable 国家编号
jobs 工种
栏位
job_id, varchar(10) 工种编号
job_title, varchar(35), Nullable 工种名称
min salary, int(6), Nullable 最低工资
max salary, int(6), Nullable 最高工资
========================================================================================================================================================================================================================================================================
5_基础查询介绍
进阶1:基础查询
语法:
select 查询列表 from 表名;
特点:
--查询列表可以是:表中的字段,常量值,表达式,函数
--查询的结果是一个虚拟的表格(相当于java中的System.out.println("字符串")只是单纯的输出
查询表中字段:
1.查询表中的单个字段(输出结果为last_name所在列的所有属性)
SELECT last_name FROM employees;
2.查询表中的多个字段
SELECT last_name,salary,email FROM employees;
3.查询标准的所有字段
SELECT * FROM employees;
5.查询时的细节
上面并没有写use myemployees
进入myemployees库
是因为已经通过软件点击进入了
--`(着重符)不是'(单引号),`是用来表示一个字段的
--如何执行命令:
你需要通过鼠标,对代码进行选中,然后运行选中代码
查询常量
1.查询常量值
SELECT 100;
SELECT 'john';
2.查询表达式
SELECT 100%98;
3.查询函数(方法)
SELECT VERSION();(查询当前mysql的版本)
7.起别名
好处:
--方便理解,提高可读性
--如果要查询的字段有重名情况,使用别名可以区分开来
方式一:
SELECT first_name AS 姓,last_name AS 名 FROM employees;
方式二:
SELECT first_name 姓,last_name 名 FROM employees;
案例:查询salary,显示结果为out put
SELECT salary AS `out put` FROM employees;
SELECT salary AS 'out put' FROM employees;
SELECT salary AS "out put" FROM employees;
这三个好像都行没看出来区别
========================================================================================================================================================================================================================================================================
6_24去重
去重:
案例:查询员工表中涉及到的所有的部门编号
SELECT DISTINCT department_id FROM employees;
加号的作用(+)
java中的加号:
--运算符:
两个操作数都为数值型
--连接符:
只要有一个操作数为字符串
mysql中的+号:
仅仅只有一个功能:运算符
--SELECT 100+50;--SELECT '123'+90;(其中一方为字符型,试图将字符型数值转换为数值型
如果转换成功,则继续做加法运算)
--SELECT 'JOHO'+90; 如果转换失败,则将字符型数值转换成0)
SELECT null+10; 如果其中一方为null,则结果肯定为null)
在mysql中对于字符串的拼接采用 concat
案例:查询员工名和姓氏连接成一个字段,并显示为姓名
SELECT CONCAT(first_name,last_name) AS 姓名
FROM employees;
========================================================================================================================================================================================================================================================================
7_27<<案例详解>>基础查询
测试1.下面的语句是否可以执行成功
select last_name, job_id, salary as sal
from employees;
执行可以通过,只将salary换名成sal
SELECT last_name AS a, job_id AS job, salary AS sal
FROM employees; (这样也行)
2.下面的语句是否可以执行成功
select *from employees;
可以执行成功,employees为表 *匹配的是表中所有的列
这样不可以:
select * from myemployees;
myemployees为数据库,想要看数据库中的表
使用:
show tables;
3.找出下面语句中的错误
select employee_id, last_name,
salary *12 AS "ANNUAL SALARY"
from employees;
4.显示表 departments的结构,并查询其中的全部数据
查看表结构:DESC departments;
输出表的全部数据:SELECT * FROM departments;
5.显示出表employees中的全部 job_id(不能重复)
SELECT DISTINCT job_id FROM employees;
6.显示出表 employees的全部列,各个列之间用逗号连接,列头显示成OUT_PUT
如果直接这样写输出结果为:
SELECT CONCAT(employee_id,first_name,last_name,email,phone_number,
job_id,salary,commission_pct,manager_id,department_id,hiredate) AS OUT_PUT
FROM employees;
结果有许多为空,原因在于有一列包含许多空值,导致运算时结果为null
更改代码
SELECT last_name AS a, job_id AS job, salary AS sal
FROM employees;
#错误代码,想要查看数据库中的表直接show tables;
#select * from myemployees;
SHOW TABLES;
SELECT employee_id, last_name,
salary *12 AS "ANNUAL SALARY"
FROM employees;
#departments是表
#想要看表的结构无法使用show
SELECT * FROM departments;
#上面相当于直接把表输出来了
#但是我只想要看他的结构
DESC departments;
#查询表中的全部数据
SELECT * FROM departments;
#输出employees中的全部 job_id
SELECT job_id FROM employees;
#输出employees中的全部 job_id且不重复
SELECT DISTINCT job_id FROM employees;
#显示出表 employees的全部列
SELECT * FROM employees;
#显示出表 employees的全部列,各个列之间用逗号连接,列头显示成OUT_PUT
SELECT CONCAT(employee_id,first_name,last_name,email,phone_number,
job_id,salary,commission_pct,manager_id,department_id,hiredate) AS OUT_PUT
FROM employees;
#如果为null,则将其对应的值改为0
SELECT IFNULL(commission_pct,0) FROM employees;
SELECT CONCAT(employee_id,first_name,last_name,email,phone_number,
job_id,salary,IFNULL(commission_pct,0),IFNULL(manager_id,0),department_id,hiredate) AS OUT_PUT
FROM employees;
========================================================================================================================================================================================================================================================================
8_28条件查询介绍
/*
语法:
select
查询列表
from
表名
where
筛选条件;(可以理解为,满足筛选就是我可以到的地方(可以输出))
执行顺序:
1.首先from表名,这是最外层确定表是否存在
如果存在则将定位到表
2.where 筛选条件
看一下那些行满足条件
3.select查询列表
得到想要的列
分类:
--按条件表达式筛选:
条件运算符:> < = !=(<>也可以这样写) >= <=
--按逻辑表达式筛选:
逻辑运算符:&& || !
and or not
--模糊查询
like
between and
in
is null
*/
#一.按条件表达式筛选:
#案例1:查询工资>12000的员工姓名
SELECT CONCAT(first_name,last_name) AS 姓名
FROM employees
WHERE (salary>12000);
#案例2:查询部门编号不等于90号的员工名和部门编号
SELECT CONCAT(first_name,last_name) AS 姓名,department_id AS 部门编号
FROM employees
WHERE department_id!=90;
#二.按逻辑表达式筛选
#案例1:查询工资在10000到20000之间的员工名,工资,以及奖金
SELECT CONCAT(first_name,last_name) AS 姓名,salary,`commission_pct`
FROM employees
WHERE (salary>=10000 AND salary<=20000);
#案例2:查询部门编号不是在90-110之间,或者工资高于15000的员工信息
SELECT *
FROM employees52
WHERE (NOT (90<=department_id AND department_id<=110) OR salary>15000);
#三.模糊查询
/*
like
特点:
1.一般和通配符搭配使用
通配符:
%任意多个字符,包含0个字符
_任意单个字符
between and
1.使用包含between and可以提高语句的简洁度
2.包含临界值
3.两个临界值小的在前,大的在后
in
1.判断某字段的值是否属于in列表中的某一项
2.使用in提高语句简洁度
3.in列表的值类型(必须统一或兼容)
4.in列表中不支持通配符(因为不是like(像)而是in(等于))
if null/if not null
1.=不能判断null值
2.is后只支持null,并不支持其他
*/
#like
#案例1:查询员工名中包含字符a的员工信息
SELECT *
FROM employees
WHERE (last_name LIKE "%a%");
#案例2:查询员工名中第三个字符为a的,第五个字符为a的员工名和工资