C:\Users\WangYiBo>mysql -uroot -proot
mysql> show databases;
mysql> use cgb210801;
mysql> show tables;
mysql> create table dept(
-> deptno int,
-> dname varchar(20),
-> loc varchar(13)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> create table emp(
-> empno int,
-> ename varchar(10),
-> job varchar(10),
-> mgr int,
-> hiredate datetime,
-> sal double,
-> comm numeric(8,2),
-> deptno int
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> set names gbk; #防止中文乱码
mysql> INSERT INTO dept VALUES(10,'accounting','一区');
mysql> INSERT INTO dept VALUES(20,'research','二区');
mysql> INSERT INTO dept VALUES(10,'operations','二区');
mysql> INSERT INTO emp VALUES(100,'jack','副总',NULL,'2002-05-1',90000,NULL,1);
mysql> INSERT INTO emp VALUES(200,'tony','总监',100,'2015-02-02',10000,2000,2);
mysql> INSERT INTO emp VALUES(300,'hana','经理',200,'2017-02-02',8000,1000,2);
mysql> INSERT INTO emp VALUES(400,'leo','员工',300,'2019-02-22',3000,200.12,2);
mysql> INSERT INTO emp VALUES(500,'liu','员工',300,'2019-03-19',3500,200.58,2);
右键 – 创建库 – 输入数据库的名字/选字符集utf8 – 创建
选中Tables – 右键 – 新建表 – 填写字段名称/字段类型/字段长度 – 创建 – 输入表名 – 确定
可以自己写SQL语句来执行,也可以直接利用工具在表中双击录入数据并保存
哪个字段添加了主键约束,哪个字段就是一张表里的唯一的主键.
约束了字段的值,必须唯一且不能为空
主键自动递增策略: 主键的值交给了数据库去管理,数据库会查到当前记录中的最大值+1.
CREATE TABLE a(
id INT PRIMARY KEY
)
#1.主键约束,给字段添加PRIMARY KEY
#特点是:字段值必须唯一 + 值不能为null
INSERT INTO a VALUES(10)#成功
INSERT INTO a VALUES(10)#不成功,因为10已经存在
INSERT INTO a VALUES(NULL)#不成功,不能插入null
#2.主键自增策略:是指主键的值不需要程序员数,
#交给数据库自增,给主键添加 AUTO_INCREMENT
CREATE TABLE b(
id INT PRIMARY KEY AUTO_INCREMENT
)
哪个字段添加了非空约束,哪个字段的值不能为null
#3.非空约束,给字段添加 not null
#特点是:字段的值必须不能为null
CREATE TABLE c(
id INT PRIMARY KEY AUTO_INCREMENT,
pwd VARCHAR(10) NOT NULL
)
#第一个null是id的值,id是主键自动递增就不用程序员赋值了,
#数据库会自动+1
INSERT INTO c VALUES(NULL,'123456')#成功,pwd有值
INSERT INTO c VALUES(NULL,NULL)#不成功,pwd不能是null
哪个字段添加了唯一约束,哪个字段的值就必须唯一
#4.唯一约束,给字段添加unique
#特点是:值必须唯一
CREATE TABLE d(
id INT PRIMARY KEY AUTO_INCREMENT,
nick VARCHAR(100) UNIQUE
)
类似于java中的方法,也有()作为标记,主要也是用来提高SQL的效率
可能有些函数的使用需要传递参数
包括: ???
#查询部门表中的部门名称
#select 部门名称 from 表名
SELECT * FROM dept
SELECT dname FROM dept #查询时使用字段名代替了*
SELECT dname,loc FROM dept #查询多个字段的值时用逗号隔开
#基础函数
#upper(a)把a的值变大写,lower(a)把a的值变小写
SELECT dname,UPPER(dname),LOWER('ABC'),LOWER(dname) FROM dept
#length(a)把a的值求长度,一个字母/数字长度为1,一个汉字长度为3(utf8)
SELECT ename,LENGTH(ename),job,LENGTH(job) FROM emp
#substr(a,b,c)-a是字段名b是截取的开始位置c是截取的长度
SELECT ename,SUBSTR(ename,2),SUBSTR(ename,2,3) FROM emp
#concat(a,b,c)-a是字段名b是想要拼接的内容c是想要拼接的内容
SELECT ename,CONCAT(ename,123,'abc') FROM emp
#replace(a,b,c)-a是字段名b是要被替换的字符c是新数据
SELECT dname,REPLACE(dname,'o','666') FROM dept
#ifnull(a,b)-a是字段名b是要把null替换成的值
SELECT comm,IFNULL(comm,1000) FROM emp
#对小数的处理:round四舍五入取整 ceil向上取整 floor向下取整
SELECT comm,ROUND(comm),CEIL(comm),FLOOR(comm) FROM emp
#对日期的处理:now获取当前系统时间year获取年month获取月day获取天
SELECT NOW(),YEAR(NOW()),MONTH(NOW()),DAY(NOW())
#对日期的处理:HOUR获取时MINUTE获取分SECOND获取秒
SELECT NOW(),HOUR(NOW()),MINUTE(NOW()),SECOND(NOW())
#常见的业务中:增删改查CRUD,其中查询需求最多
#条件查询:
#1.distinct把数据去重
SELECT DISTINCT loc FROM dept
#2.where用来引导判断条件
#select ? from ? where ?
#练习1:查询部门编号=40的数据
SELECT * FROM dept WHERE deptno=40
SELECT * FROM dept WHERE deptno=40000
#练习2:查询部门编号>10的数据
SELECT * FROM dept WHERE deptno>10
SELECT * FROM dept WHERE 1=1 #条件永远成立
#练习3:查询部门编号>10并且地址在二区的数据
SELECT * FROM dept WHERE deptno>10 AND loc='二区'
#练习4:查询部门编号>10或者地址在二区的数据
SELECT * FROM dept WHERE deptno>10 OR loc='二区'
#练习5:查询部门编号=10的或者=20的或者=30的数据
SELECT * FROM dept WHERE
deptno=10 OR deptno=20 OR deptno=30
#同上的需求,被简化--in子句
SELECT * FROM dept WHERE deptno IN(10,30)#查deptno=10 or deptno=30的
SELECT * FROM dept WHERE deptno NOT IN(10,20,30)
#3.like模糊查询 %是通配符,通配0~n个字符
#练习1:查询按照员工名字以l开头员工信息
SELECT * FROM emp WHERE ename LIKE 'l%' #以l开头
#练习2:查询按照员工名字包含o 的员工信息
SELECT * FROM emp WHERE ename LIKE '%o%' #中间包含o
#练习3:查询按照员工名字以a结尾 的员工信息
SELECT * FROM emp WHERE ename LIKE '%a' #以a结尾
#4.null数据的处理
#练习1:查询没有奖金的员工信息
SELECT * FROM emp WHERE comm IS NULL
#练习2:查询有奖金的员工信息
SELECT * FROM emp WHERE comm IS NOT NULL
#5.between...and在区间范围内的数据
#练习1:查询工资范围在5000~10000内的员工信息
SELECT * FROM emp WHERE sal>5000 AND sal<10000 #(5000,10000)
SELECT * FROM emp WHERE sal BETWEEN 5000 AND 10000 #[5000,10000]