数据库

1.建立数据库

create  database (库名);

use  (库名);

2.创建表

create  tables (表名)(

 列名1 +类型+条件,

列名2+类型+条件,

……

);

3.插入数据
insert into 表名(列1, 列2...列n) values (值1,值2... 值n);

4.查询数据

select * from (表名);

select (列名) from (表名);

5.数据类型

整数类型
    int -2^31 ~ 2^31-1   四个字节
    tinyint 一个字节
    smallint 两个字节
    bigint 八个字节

小数类型
    浮点类型
        FLOAT 
        DOUBLE
 定点类型 (小数部分不会丢失精度,占用空间高)
        DECIMAL(p, s)
        p 有效数字长度
        s 小数位数
        
        decimal(10, 2)
        12345678.77  ok
        123456789.44  存不下
        12345678.456  小数部分变为46
        
字符串类型
    char(最大长度)    定长的字符类型
    varchar(最大长度)  变长的字符类型
日期类型
    datetime 包括年月日,时分秒 时间范围短(1000-1-1 ~ 9999-12-31)
    date    只包括年月日
    time    只包括时分秒
    timestamp  也可以包括年月日时分秒, 时间范围短(1970-1-1 ~ 2038-1-19)

7.修改
update 表 set 列名=新值, 列2=值2 ...;  -- 修改表中所有的行
update 表 set 列名=新值, 列2=值2 ... where 列名=条件;   -- 仅更新符合条件的记录 

update course set cname='java se'; -- 修改表中所有课程名称
update course set cname='spring' where cid=1000; -- 仅修改了cid=1000 这条记录的课程名称

8. 删除
delete from 表名; -- 删除这个表中所有记录,但表的定义不动
delete from 表名 where 列名=条件; -- 仅删除符合条件的记录

drop table 表名; -- 删除这个表,连同里面的数据

9. 导入数据
1) 可以用
mysql > source 路径\sql文件的名称;

2) 在cmd窗口运行
mysql -uroot -p test3 < E:\6.23实训班共享\预习\数据库(详)\scott.sql
其中test3是数据库的名字 

10. 导出数据 
在cmd窗口运行
mysqldump -uroot -p test3 > a.sql

功能:

1.alter 修改
给老师表添加一列年龄 alter table teacher add age tinyint;
给老师表的姓名列扩展长度  alter table teacher modify tname varchar(30);

2.insert 插入数据
标准语法: insert into 表(多个列...) values (多个值...);
mysql独有的: 一次插入多行数据
            insert into 表(多个列...) values 
                (多个值), (多个值), (多个值) ...;

3.update 修改

update 对已有的数据进行更新
-- 更新所有的员工工资涨100
update emp set sal=sal+100;

-- 修改7369的员工部门为10号部门
update emp set deptno=10 where empno=7369;

-- 修改7000的员工部门为10号部门
update emp set deptno=10 where empno=7000;
如果条件不满足去更新不会报错,但影响行数是0

-- 修改7369的员工工资为9000,职务经理
update emp set sal=9000,job='manager'
    where empno=7369;
    
注意:主键列主要用于查询条件,一般不会更新
4.select 查询

select 列名... from 表名 where 条件;

运算符

5.逻辑运算 and(并且) or(或者) not(取反)
  
  -- 查询工资大于800 并且 部门等于20
  where sal>800 and deptno=20
  -- 部门=20 或者 等于30的
  where deptno=20 or deptno=30;

6.like (模糊查询)
   例如查询以 ‘S’字母打头的员工
   
select * from emp where ename like 'S%';

通配符 % 表示匹配0~多个任意的字符
通配符 _ 表示匹配一个任意字符

7.between ... and ... 范围匹配
求工资大于等于1000, 小于等于2000的员工
select * from emp where sal>=1000 and sal<=2000;

select * from emp where sal between 1000 and 2000;
1) 必须按有小到大顺序
2) between 包含等于条件

8.in

求这一列是否在一个值列表内
求所有销售人员和经理
select * from emp where job='SALESMAN' or job='MANAGER';

select * from emp where job in ('SALESMAN', 'MANAGER');

9.limit (mysql特有的)
用来限制返回的结果数
1) limit n;       n表示最多返回几条记录
2) limit m, n;    m代表偏移量(下标) 注意偏移量从0开始

10.order by 用来给结果排序
语法: order by 列名 asc|desc, 列名 asc|desc, ...
例如:按工资升序:
select * from emp order by sal asc;(可以省略asc)
按工资降序:
select * from emp order by sal desc;
其中如果不写,默认升序

如果多列排序,如果第一列取值相同,再按照第二列进行排序,例如:
先按工资排序,工资相同的,再按姓名排序:
select * from emp order by sal asc, ename asc; /*如果升序,两个asc都可以省略*/

函数

1. 提取时间的某个部分
extract(时间部分 from 原始时间)
select extract(year from now());
select extract(year_month from now());
返回的结果是一个数字类型

2.拼接字符串
concat(值1, 值2, ... 值n)
select concat('a', 'b', 'c');
select concat('a', 18, 'c'); /*可以把其它类型当做字符串拼接*/
3.求长度的函数
char_length 按字符为单位统计长度
length      按字节为单位统计长度
utf8mb4编码下,汉字一个字符占三个字节,英文一个字符占一个字节

4.组函数
最大值 max(列)
最小值 min(列)
和     sum(列)
个数   count(列)  会排除null值
       count(*)   针对这次查询,看看一共有多少行
平均值 avg(列)

5.组语法 (group by 后的列取值相同的会被分为一组)
select ... from 表 group by 列1,列2... having 分组条件

6.去除重复
distinct
select distinct job from emp; /*去除重复后的职位有哪些*/
select count(distinct job) from emp; /*有几种职位*/

分组后 select,order by 的限制
  1) select,order by 中的列必须和group by中的列一样
  2) 其它没有包含在 group by语句中的列,必须和组函数一起用

7.语法顺序
select ... from ... where ... group by ... having ... order by ... limit;

8.列别名问题
语法:  select 列名 别名 ... 
语法2: select 列名 as 别名 ..

表别名问题
语法 : select ... from 表 别名
select e.* from emp e;

数据库的表连接:

1.内连接

Select …… from 表1 inner join表2  on 连接条件 ……

Select…… from 表1,表2  where 连接条件

内连接是把两张表中符合连接条件的的数据相结合,不符合的 则不会有结果

如果两张表中有同名列 则需要在列名前加以区分(表名.列名)

2.左

Select …… from 表1 left [outer] join 表2 on连接条件

3.右

Select …… from 表1 right [outer] join 表 2 on 连接条件

4.多表连接

Select…… from 表 1 inner join 表2 on 连接条件

inner join 表3 on 连接条件(连接属性与前一致) ……

等同于:

select * from 表1,表2,表3

                                    where 连接条件 and 连接条件.

5.左外多表连接:

Select* from 表1 left join 表2 on连接属性

                                   left  join 表3 on 连接条件.

6.自连接

一个表和自己连接(自己属性与另一属性相关)

Select …… from 表1 (别名)inner 表2(别名) on 连接条件

7.子查询:

把某个select结果当做一个值,或一张表做进一步查询

例如:(当做值)找具有最高工资的员工信息

Select max(sal) from emp;

Select * from emp where sal=(select max(sal) from emp);

(当做表) 获取每个部门的平均工资和部门的名称(子查询作为表)

(select  deptno  ,avg(sal) from emp group by deptno)s

select * from (子查询)s  inner join dept b on s.deptno=b.deptno;

将子查询当做一个函数

部门编号是一个入参, 最大工资是返回结果

select * from emp e where sal = m(e.deptno); 

select * from emp e where sal = (select max(sal) from emp where deptno = e.deptno);

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值