MySQL 基础篇
- 一、NySQL服务的登录和退出
方式一:通过mysql自带的客户端 (只限于root用户)
方式二:通过windows自带的客户端登录:
mysql【-h主机名-P端口号】-u用户名-p密码
#for example
mysql -h localhost -P3306 -u root -p8493
退出:
exit或ctrl+C
- 二、 MySQL的常见命令
1.查看当前所有的数据库
show databases;
2.打开指定的库:
use 库名;
3.查看当前库的所有表
show tables;
4、其他库的所有表:
show tables from 库名
5、创建表:
create table 表名(
列名 列类型,
列名 列类型,
);
#create table stuinfo(
id int,
name varchar(20));
6、查看表结构
desc 表名;
7.查看服务器的版本:
方式一: 登录到mysql服务端
select version();
方式二:没有登录到mysql服务端
mysql --version
或
mysql --V
MySQL的语法规范
- 不区分大小写,但是建议关键字大写,表明,列名小写
- 每条命令最好用分号结尾 ;或者\g
- 每条命令根据需要,可以进行缩进和换行
- 注释
- 单行注释:
#注释文字
- 单行注释:
-- 注释文字
- 多行注释:
/* 注释文字 */
DQL( data query language) select语句
- 1.查询常亮值
SELECT 100;
SELECT 'Join';
- 2.查询表达式
SELECT 100*98;
- 6.查询函数
SELECT VERSION();
-
- 起别名(为字段起别名)
/*-- ①可以方便理解 ②如果要查询的字段有重名的情况,使用别名可区分开来
*/
#方式一: SELECT 100%98 AS 结果; SELECT last_name AS 姓, first_name AS 名 FROM employees;
#方式二: SELECT last_name 姓,first_name 名 FROM employees;
#案例:查询salary,显示结果为out put
SELECT salary AS "out put" FROM `employees`;
- 8.去重 (DISTINCT)
#案例:查询员工表中涉及到所有的部门编号
SELECT DISTINCT `department_id` FROM `employees`;
-
- +号的作用
/* java 中的+ 号: ①运算符,两个操作数都为数值型 ②链接符,只要有一个操作数为字符串
>
> mysql中的+号: 仅仅只有一个功能:运算符
>
> select 100+90; 两个操作数都为数值形,则做加法运算 select ’123‘+90;
> 其中一方为字符型,试图将字符型数值型转换成数值型
> 如果转换成功,则继续做加法运算 select 'john'+90; 如果转换失败,则讲字符数值转换成0 select null+10; 只要其中一方为null,则结果肯定为null
> */
#案例:查询员工名和姓链接成一个字段,并显示为 姓名
SELECT CONCAT('a','b','c') AS result;
SELECT
CONCAT(last_name, first_name) AS 姓名
FROM
`employees`;
进阶2: 条件查询
/*
语法:
select
查询列表
from
表名
where
筛选条件;
分类:
一、按条件表达式筛选
简单条件运算符:>, <, = ,!= ,<>(不等于),>= , <=
二、按逻辑表达式筛选
逻辑运算符:
作用;用于连接条件表达式
&& || !
and or not
&& 和 and:两个条件都为true,结果为true,反之为false
|| 和 or :只要有一个是true。结果为true,反之false
!或 not:如果连接的条件本身为false。结果为true,反之false
三、模糊查询
like
between and
in
is null
*/
#按条件表达式筛选
#案例1:查询员工工资》12000的员工信息
SELECT
*
FROM
`employees`
WHERE
salary>12000;
#案例2:查询部门编号不等于90号的员工名和部门编号
SELECT
`last_name`,
`department_id`
FROM
`employees`
WHERE
`department_id`!=90;
#二、按逻辑表达式筛选
#案例1:查询工资在10000到20000之间的员工名、工资以及奖金
SELECT
`last_name`,
`salary`,
`commission_pct`
FROM
`employees`
WHERE
salary>=10000
AND
salary<=20000;
#案例2:查询部门编号不是在90到110之间,或者工资高于15000的员工信息
SELECT
*
FROM
`employees`
WHERE
`department_id`<90 OR `department_id`>110 OR `salary`>15000;
#或者
SELECT
*
FROM
`employees`
WHERE
NOT(`department_id`>=90 AND `department_id`<=110) OR `salary`>15000;
三、模糊查询
/*
like
特点:
①一般和通配符搭配使用
通配符:
% 任意多个字符,包含0个字符
_ 任意单个字符
between and
in
is null | not null
*/
#案例1:查询员工名中包含字符a的员工信息
SELECT
*
FROM
employees
WHERE
`last_name` LIKE '%a%'; #(代表任意位置都可以)
#案例2:查询员工名中第三个字符为e,第五个字符为a的员工名和工资
SELECT
`last_name`,
`salary`
FROM
`employees`
WHERE
`last_name` LIKE '__n_l%'
#案例3:查询员工名中第二个字符为_的员工名 用\进行转义
SELECT
last_name
FROM
`employees`
WHERE
`last_name` LIKE '_\_%'
#或者也可以自己设定转义符
SELECT
last_name
FROM
`employees`
WHERE
`last_name` LIKE '_$_%' ESCAPE '$';
- #between and
#案例:员工编号在100到120之间的所有员工信息
SELECT
*
FROM
`employees`
WHERE
`employee_id` BETWEEN 100 AND 200;
in
#案例:查询员工的工种编号是 IT_PROT,AD_VP,AD_PRES 中一个的员工名和工种编号
SELECT
`last_name`,
`job_id`
FROM
`employees`
WHERE
`job_id` IN ('IT_PROG','AD_VP','AD_PRES');
is null
#案例:查询没有奖金的员工名和奖金率
SELECT
`last_name`,
`commission_pct`
FROM
`employees`
WHERE
`commission_pct` IS NULL;
#案例:查询有奖金的员工名和奖金率
SELECT
`last_name`,
`commission_pct`
FROM
`employees`
WHERE
`commission_pct` IS NOT NULL;
#安全等于 <=> 也可以像 is null 判断 / 普通查询
SELECT
`last_name`,
`commission_pct`
FROM
`employees`
WHERE
`commission_pct` <=> NULL;
is null VS. <=>
<=>: 既可以判断NULL值,有可以判断普通的数值,可读性较低
IS NULL :仅仅可以判断NULL值,可读性较高
#练习:查询员工好为176的员工的姓名和部门号和年薪
SELECT
`last_name`,
`department_id`,
`salary`*12*(1+IFNULL(`commission_pct`,0)) AS '年薪'
FROM
`employees`
WHERE
`job_id`= 126