cgb2108-day02

Posted cgblpx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cgb2108-day02相关的知识,希望对你有一定的参考价值。

一,作业

–1,创建表

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)

–2,插入数据

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);

二,使用Sqlyog工具

–1,创建库

右键 – 创建库 – 输入数据库的名字/选字符集utf8 – 创建

–2,创建表

选中Tables – 右键 – 新建表 – 填写字段名称/字段类型/字段长度 – 创建 – 输入表名 – 确定

–3,创建记录

可以自己写SQL语句来执行,也可以直接利用工具在表中双击录入数据并保存

三,字段约束

–1,主键约束

哪个字段添加了主键约束,哪个字段就是一张表里的唯一的主键.
约束了字段的值,必须唯一且不能为空
主键自动递增策略: 主键的值交给了数据库去管理,数据库会查到当前记录中的最大值+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
)

–2,非空约束

哪个字段添加了非空约束,哪个字段的值不能为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

–3,唯一约束

哪个字段添加了唯一约束,哪个字段的值就必须唯一

#4.唯一约束,给字段添加unique
#特点是:值必须唯一
CREATE TABLE d(
 id INT PRIMARY KEY AUTO_INCREMENT,
 nick VARCHAR(100) UNIQUE
)

四,基础函数

–1,概述

类似于java中的方法,也有()作为标记,主要也是用来提高SQL的效率
可能有些函数的使用需要传递参数
包括: ???

–2,测试

#查询部门表中的部门名称
#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())



五,条件查询

–1,测试

#常见的业务中:增删改查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,20,30)






以上是关于cgb2108-day02的主要内容,如果未能解决你的问题,请参考以下文章

cgb2108-day13

cgb2108-day11

cgb2108-day06

cgb2108-day14

cgb2108-day05

cgb2108-day17