目录
一、数据库和SQL概述
(一)数据库的好处
- 实现数据持久化
- 使用完整的管理系统统一管理,便于查询
(二)数据库的概念
DB
数据库(database),存储数据的仓库,保存了一系列 有组织 的数据。
DBMS
数据库管理系统(Database Management System)。数据库是通过 DBMS 创建和操作的容器。常见的数据库管理系统:MySQL、Oracle、DB2、SqlServer(其中MySQL用得比较多)
SQL
结构化查询语言(Structure Query Language),专门用来与数据库通信的语言。
SQL的优点
1.是一门通用的语言,几乎所有DBMS都支持SQL。
2.简单易学
3.灵活使用,可以进行非常复杂而又高级的数据库操作。
(三)数据库结构特点
1.将数据放在表中,表再放到库中。
2.一个数据库中可以有多个表,每个表有一个名字,用来标识自己。
(表名具有唯一性。)
3.表具有一些特性,这些特性定义了数据在表中如何存储,类似 java 中 “类” 的设计。
4.表由 列 组成,也称为 字段。所有表都是由一个或多个列组成的,每一列类似 java 中的“属性”。
5.表中的 数据 是按行存储的,每一行类似于Java中的“对象”。
二、MySQL的使用
(一)MySQL服务的启动和停止
- 方法一:
Windows10:Ctrl+Shift+Esc -> 查看服务->点击,启动和停止服务
(太麻烦了,一般懒得用这个方法)
- 方法二:
通过命令行cmd(管理员权限)
# 启动
net start [mysql服务名]
# 停止
net stop [mysql服务名]
(二)MySQL的登陆和退出
//本地登陆
mysql -h localhost -p 3306 -U root -p
//root用户快捷登录
mysql -u root -p
//还有这种,我就不演示啦,因为不让你看我的密码~
mysql -u root -p(密码)
一般在本机输这个就够了
不需要之后可输入exit退出,还会跟你说bye(或者使用Ctrl + C也可以)
登陆之前,记得把MySQL启动了!!!!!!
不然会出现 Can't connect to MySQL server on 'localhost:3306' (10061)
(这个问题之后我也会加入问题集,菜鸟每天飞过.jpg)
(三)MySQL的常用命令
查看当前所有数据库
show databases;
打开指定数据库
use 库名;
查看当前所在的库
select database();
查看当前库的所有表
show tables;
查看其他库的所有表
show tables from 库名;
查看表中的所有数据
select * from 表名;
创建表
create table 表名
(
列名 列类型,
列名 列类型,
...
);
查看表结构
desc 表名;
查看服务器版本
- 方式一: 登录到 mysql 服务端
select version();
- 方式二:未登录到 mysql 服务端
mysql --version
mysql -V
(四)MySQL语法规范
1.不区分大小写,但是由规范,建议关键字大小写,表名、列名小写。
2.每条命令用分号 ; 结尾 。
3.每条命令根据需要,可以进行缩进或换行。
4.关于注释
单行注释
--注释文字
多行注释
/* 注释 */
三、DSL语言学习
DQL: DataBase Query Language(SQL分支:数据库查询语言)
(一)基础查询
下面这是一张表
myemployees/employees 员工表
- employee_id 员工编号
- first_name 名
- last_name 姓
- email 邮箱
- phone_number 电话号码
- job_id 工种编号
- salary 月薪
- commission_pct 奖金率
- manager_id 上级领导的员工编号
- department_id 部门编号
- hiredate 入职日期
myemployees/departments 部门表
- department_id 部门编号
- department_name 部门名称
- manager_id 部门领导的员工编号
- location_id 位置编号
myemployees/locations 位置表
- location_id 位置编号
- street_address 街道
- postal_code 邮编
- city 城市
- state_province 州
- country_id 国家编号
myemployees/jobs 工种
- job_id 工种编号
- job_title 工种名称
- min_salary 最低工资
- max_salary 最高工资
基本查询语法:
着重号 `` ,当字段名与已知 SQL 关键字重复,则可使用。一般情况也可使用。
语法:
select 查询列表 from 表名;
特点:
1.查询列表可以是表中的字段、常量值、表达式、函数
2.查询的结果是一个虚拟的表格
1.查询表中单个字段
SELECT
last_name
FROM
employees ;
2.查询表中的多个字段
SELECT
last_name,
salary,
email
FROM
employees ;
3.查询表中的所有字段
方法一:
SELECT
`employee_id`,
`first_name`,
`phone_number`,
`commission_pct`,
`manager_id`,
`department_id`,
`hiredate`
FROM
employees ;
方法二:
SELECT * FROM employees;
4.查询常量值
SELECT 100;
SELECT 'Murphy';
5.查询表达式
SELECT 100 % 98;
6.查询函数
SELECT VERSION();
7.起别名
关键字:AS
AS优点:
1.便于理解
2.如果要查询的字段有重名的现象,使用别名可以区别出来。
方式一:
SELECT 100%98 AS 结果;
SELECT last_name AS 姓,first_name AS 名 FROM employees;
方式二:
SELECT last_name 姓, first_name 名 FROM employees;
example :
SELECT salary AS "out put" FROM employees;
--查询 salary,显示结果为 out put
--为区别关键字与别名,故用 " " 进行区别
8.去重
关键字:distinct
example:查询员工表中涉及的所有部门编号
```sql
SELECT DISTINCT department_id FROM employees;
```
9. ' + ' 的作用
Java中的 ' + ' :
- 运算符:两个操作数都是数值
- 连接符:只要有一个为字符串
MySQL中的 ' + ' :
- 运算符
# 两个操作数都是数值型,则作加法运算
select 100+90; # 190
# 其中有一个为字符型,试图将字符串数值转化成数值型
# 如果转换成功,则继续做加法运算。
select '123'+90; # 213
# 如果转换失败,则将字符串型转换成 0
select 'abc'+90; # 90
select null + 10; 只要其中一个为 null,则结果肯定为 null
10.CONCAT连接符
example:查询 将员工的名和姓连接成一个字段,并显示 姓名
SELECT CONCAT('a','b','c') AS 结果; # abc
SELECT
CONCAT(last_name, " ", first_name) AS 姓名
FROM
employees;
(二)条件查询
1.基本语法
select
查询列表
from
表名
where
筛选条件
2.按条件表达式查询
USE myemployees;
SELECT
*
FROM
employees
WHERE
salary > 12000;
3.按逻辑表达式查询
&& , || ,!
and , or , not
SELECT
*
FROM
employees
WHERE
department_id < 90 OR department_id > 110 OR salary > 15000
3.模糊查询
LIKE
- 一般与通配符搭配使用
- 通配符: % 任意多个字符,包含0个字符匹配任意单个字符
- 转义字符escape<>将指定字符设置为转义符号
example1:查询员工名中含有a字母的员工信息
SELECT
*
FROM
employees
WHERE
last_name LIKE "%a%";
example2:查询员工名中第三个字符为n,第五个字符为 l 的员工名和工资
SELECT
last_name,
salary
FROM
employees
WHERE
last_name LIKE '__n_l%';
example3:查询员工名中第二个字符为_的员工名
SELECT
last_name
FROM
employees
WHERE
#last_name LIKE "_\_%"
last_name LIKE "_$_%" ESCAPE "$";
between and
- 提高简洁性
- 包含临界值(临界值不能调换顺序)
SELECT
*
FROM
employees
WHERE
--employee_id >=100 and employee_id <= 120;
employee_id BETWEEN 100 AND 120;
in
判断某个字段是否属于 in 列表中的某一项
- 提高简洁度
- in里面的值类型必须一致
example:查询员工的工种编号 IT_PROT, AD_VP, AD_PRES 中的一个员工名和工种编号
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN ('IT_PRO', 'AD_VP', 'AD_PRES');
--job_id = 'IT_PROT' OR job_id = 'AD_VR' OR job_id = 'AD_PRES';
IS NULL / IS NOT NULL
- =或<>不能判断等于null
- is null ,is not null可以
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NOT NULL;
安全等于<=>
<=> 即可以判断NULL值,又可以判断普通的数值
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct <=> NULL;
(三)排序查询
未完待续……(溜了runrunrun)
(本笔记是尚硅谷课程学习时所做)