为什么学习数据库
1、持久化数据,永久性存储
2、方便查找检索
3、存储大量数据
4、共享,安全
5、通过组合分析,获取新的数据
数据库的相关概念
1、DB:数据库,保存一组有组织的数据的容器 2、DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据 3、SQL:结构化查询语言,用于和DBMS通信的语言
MySQL
MySQL不区分大小写,也可以换行写
MySQL中的小括号叫函数
MySQL中非常量的,要用引号引起来
MySQL中没有字符串类型,叫字符型,多个字符,空字符,都叫字符型
MySQL中的LIMIT语句就是MySQL独有的方言,其他数据库都不支持!
不知道优先级,加小括号提升就行
Oracle 或 SQL Server都有自己的方言
前面加个#,它认为这是个无效的命令,没有影响,类似与注释,不会报错
单行注释:一种是#,一种是 — —(杠杠,两个—)+空格
多行注释:先/* 再*/ 中间不能嵌套
MySQL的使用
启动和停止服务
- 用命令行运行MySQL (要以管理员身份打开命令提示符)
net start mysql08 开启mysql
net stop mysql08 停止mysql
-用命令行的方式进自带客户端
在命令提示符中输入:
mysql -u (user,用户名)-p(密码) 如果是免安装的话,没有密码,直接 -p1978827
mysql -h(host,指定主机,如果是localhost 本机,可以省略) -P3306(端口号如果是3306,可以省略) -u -p
exit 退出客户端
MySQL的基本命令
执行方式是,选中即执行
mysql命令要求使用 分号 或 \g 结尾
使用show databases;查看有那些数据库
text(测试),是空的数据库、
进去的方法,例,进mysql:
use mysql; 这一步相当于把门打开
show tables; 显示表(看一下里面的表)
或:
show tables from test 直接看里面的东西,只要不写use,就不在此数据库内。(相当于没开门就进不去)
select database(); 相当于调用了一个函数,查看当前所在的库
存数据必须先有表,
建表:分析,存那些数据,跟它固定格式
例: 存学员信息
create table stuinfo(
stuid int, 学号,int类型,用逗号隔开,这部分是字段
stuname varchar(20), 字符个数最长不能超过20,在这里是名字的字符个数 多个字段
gender char, char就代表单个字符
borndate datetime); 年龄用生日代替,年龄会变,生日不会
desc stuinfo; 查看stuinfo的描述
select * from stuinfo; 查看数据
insert into stuinfo values(1,'汉字','年龄'); 除了数字外,其余都用单引号,引起来。
set name gbk 修改字符集为jdk
update stuinfo set borndate=' ' where(相当于if) stuid = 2;
修改 这个表 设置 这个字段的值=' '
delete from stuinfo where stuid = 1; 删除1号
alter table stuinfo add colum email varchar(20) 修改表结构,这个是,添加一个新字段。
drop table stuinfo; 删除表格
control+c 强制结束
Sql语句
分类
-
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列,等;
-
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据); (加重的非常重要)
-
DCL(Data Control Language):数据控制语言,用来定义访问的权限的安全级别;
TCL(Transaction Control Language)
-
DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
DQL
DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
语法:
select
select list/要查询列的名称/
create/drop/alter 由这几个关键字引领的,都成为DDL语言
insert/update/delete 由这几个关键字引领的,都成为DML语言
DML 就是增删改
DQL 查 主要的关键字就是select
基础查询
语法:select 查询列表 from 表名;
特点:
1、查询的结果集 是一个虚拟表
2、select 查询列表 类似于System.out.println(输入内容);
区别是:select后面跟的查询列表,可以有多个部分组成,中间用逗号隔开
例如:select 字段一,字段二,表达式 from 表;
system.out.println()的输入内容,只能有一个。
3、执行顺序
例:select first_name from employee;
先判断有没有这个表from employee,如果没有则报告表的错误
顺序:先from子句,再select子句
4、查询列表可以是:字段、表达式、常量、函数等
一、查询常量
SELECT 100 ;#不用加form,原因在于100没有来自于某个表
二、查询表达式
SELECT 100%3;
三、查询单个字段
SELECT last_name FROM `employees`;# `这是着重号,在esc下面` #如果表名和关键字重复了,则需要加着重号
四、查询多个字段
SELECT `last_name`, `email`, `job_id` FROM `employees` ;
五、查询所有字段
SELECT * FROM `employees`; F12:对其格式
六、函数
(调用函数,获取返回值) SELECT VERSION(); #查询服务器版本 函数 ifnull(表达式1,表达式2): 表达式1:可能为null的字段或表达式 表达式2:如果表达式1为null,则最终结果显示的值 功能: 如果表达式1为null,则显示表达式2,否则显示表达式1
七、起别名
方式一:使用as关键字 SELECT USER() AS 用户名; SELECT USER() AS '用户名'; SELECT USER() AS "用户名"; SELECT last_name AS "姓 名" FROM employees;
方式二:使用空格 SELECT USER() 用户名; SELECT USER() '用户名'; SELECT USER() "用户名"; SELECT last_name "姓 名" FROM employees;
八、+的作用,拼接
-- 需求:查询 frist_name 和 last_name 拼凑成的全名, -- 最终起别名为: 姓 名
方案一:使用+ pass×
SELECT frist_name+last_name AS "姓 名" FROM employees;
方案二:使用concat拼接函数,拼接的时候,其中一个为null最总的结果为null
SELECT CONCAT(first_name,last_name) AS "姓名" FROM employees;
java中+的作用: 1、加法运算 100+1.5 'a'+2 2、拼凑符 至少有一个操作数为字符串 "hello"+"a"
MySQL中的+作用: 只有一个:加法运算
①两个操作数都是数值型 100+1.5 ②其中一个操作数为字符型 将字符型数据强制转换成数值型,如果无法转换,则当做 0 处理
'张无忌'+100===>100
③其中一个操作数是null
null+null===> null null+100===> null
九、distinct的使用
-- 需求:查询员工涉及到的部门编号有哪些
SELECT DISTINCT department_id FROM employees; distinct的作用:去重复,
十、 DESC查看表的结构
DESC employees; -- 查字段,每个字段的类型,约束…… SHOW COLUMNS FROM employees; -- columns 列
条件查询
语法:
select 查询列表 from 表名 where 筛选条件;
执行顺序: ①from子句 ②where子句 ③select子句
select last_name,first_name from employees where salary>20000;
特点:
1、按关系(条件)表达式筛选
关系运算符: > < >= <= = <> 补充:!= 和 <> 是不等于,可以用,但不建议用 !=
2、按逻辑表达式筛选 逻辑运算符:and or not 补充:也可以用&& || !,但不建议
一、按关系表达式筛选
-- 案例1:查询部门编号不是100的员工信息
SELECT * FROM employees WHERE `department_id`<>100;
#案例2:查询工资<15000的姓名、工资
SELECT `last_name`,`first_name`,`salary` FROM `employees` WHERE salary<15000;
二、按逻辑表达式筛选
-- 案例1:查询部门编号不是50-100之间员工姓名、部门编号、邮箱 -- 方式一:
SELECT `last_name`,`department_id`,`email` FROM `employees` WHERE `department_id`>100 OR `department_id`<50;
-- 方式二:
SELECT `last_name`,`department_id`,`email` FROM `employees` WHERE NOT(`department_id`>=100 AND `department_id`<=50);
#案例2:查询奖金率>0.03 或者 员工编号在60-110之间的员工信息
SELECT * FROM `employees` WHERE `commission_pct`>0.03 OR (`employee_id`>=110 AND `employee_id`<=60);
关键字
1、like
功能:一般和通配符搭配使用,对字符型数据进行部分匹