笔记02-数据库语言

  • MySQL命令
    1.mysql -uroot -p 回车,再输入密码,密码是加密的
    2.mysql -uroot -proot 直接输入密码进入,不安全
    3.mysql -utoot -h localhost -P 3306 -proot 远程访问数据库
    4.mysql -utoot -h127.0.0.1 -P 3306 -proot
    5.mysql> 有了这个标识 就说明已经连接上mysql的服务了
    6.exit;是与服务器断开连接
    7.host主机ip地址
    8.任何客户端连接服务器都需要ip、端口号、协议TCP/IP
    9.show databases ;显示当前数据库管理系统中所有的数据库,数据库是用来存储table(表)的,table是用来管理record(记录)的.。record是用来管理column(字段)。
    information_schema
    mysql
    performance_schema
    以上三个数据库不要碰
    10.create database 数据库名;创建指定名字的数据库
    11use 数据库名;使用当前数据库.
    12.show tables;显示当前数据库下的所有表
    13.drop database 数据库名;删除该数据库

学习数据库语言

SQL(Structure Query Language)结构化查询语言
  • mysql的划分

  • DDL(Database Defintion Language)数据库定义语言
    1.表的创建
    create table 表的名字(
    字段名 数据类型(长度),
    字段名 数据类型(长度);
    )
    数据类型 int varchar字符串 char 字符串
    2.查看表
    show tables;
    3.查看表结构
    desc 表名字;
    4.删除表
    drop 表名字;
    5.修改表结构
    1)alter table 表名字 [column] drop 字段名;删除该表中的该字段
    2)alter table 表名字 [column] modify 字段名新的数据类型(长度);修改数据类型,也可以修改长度。
    3)alter table 表名字 [column] add 字段名 数据类型(长度);添加一个新的字段
    4)alter table 表名字 [column] change 老名字 新名字数据类型(长度);就名字变,其他的都不可以变,这是修改名字

  • DML(Database Manipulation Language)数据库管理语言
    1.DML必须建立在DDL语句上
    2.DML向表中添加记录、删除记录、修改记录、查询记录
    3.添加记录
    1)insert into 表名 (字段列表) values (值列表); 值对应着字段列表顺序添加
    2)insert into 表名 values (值列表);字段列表顺序为默认的添加表的顺序
    注意:字段可以乱序,但是必须保证个数一致
    3)insert into 表名 (字段列表) values (值列表1),(值列表2);
    4.删除记录
    delete from 表名 ;删除所有数据
    delete from 表名 where 字段名 = 值;删除与这个值相等的所有字段
    detele from 表明 where 字段名 = 值 and 字段名 = 值;删除与这两个值想的所有字段。
    注意:在我们正常项目中,一般使用逻辑删除,逻辑删除就是修改其状态,不会使用物理删除,因为物理删除,是真删除,delete谨慎使用。
    5.修改记录
    update 表名 set 字段名1= 想要改的值 , 字段名2 = 想要改的值 where 字段名 = (最好是唯一的)值。
    一般在where后面的字段一般都是主键,所有表都会添加一个id字段,保证数据的唯一性
    6.查询记录
    select *from 表明;查询当前表的所有数据结构

  • 数据库约束
    作用:使所有品牌的数据库统一约束,有一定限制、规矩。目的就是在创建数据库表时不能随便创建,必须遵循一定规矩。
    1.非空约束:字段名 数据类型(长度) not null; 在创建表的时候,设置当前字段必须有值。
    2.检查约束:字段名 数据类型(长度) check(范围) ;设置一定的范围。例如,玩家年龄不能低于18岁。mysql不支持
    3.唯一约束:字段名 数据类型(长度) unique;用这个单词修饰的字段的值必须是唯一的,为了解决误填数据的操作
    4.主键约束:字段名 数据类型(长度) primary key 当前表的特点就是非空唯一的,用于id 时候后边还添加 auto_increment;自增操作
    复合主键:使用两个字段同时唯一才是唯一的,例如:名字和年龄都是主键,两个都想同时才不可以创建,一个相同时可以
    5.外键约束:建立在两个表的关系
    格式:foreign key(自己表的字段名字随便) references 主表(主键字段名); 例如:froeign key(haha) references brand(bid);
    1)一对一 人和身份证号
    2)一对多 品牌和商品
    3)多对多
    6.默认约束:字段名 数据类型(长度) default ‘123’设置默认值为什么。

  • DQL(Database Query Language)数据库查询语言
    1.select * from 表名; 查询所有 *代表所有字段,性能慢
    2.select 字段名 from 表名;

    where :过滤条件
    1.比较运算符:>, <, =, <=, >=, !=, <>
    2.and,并列关系,条件必须满足
    3.between…and… 在什么区间相当于 >= and<=
    4.or 或,满足一个条件即可
    group by:分组,一般跟count(1)连用
    select job ,count(1)from emp group by job;
    having:过滤条件,一般跟group by 连用
    select deptno,count(1) as 总数 from emp group by deptno having 总数 >= 5
    order by:asc升序,desc降序排序
    select * from emp where sal > 2000 order by sal desc;
    like:模糊搜索
    select * from emp where ename like ‘_A_E%’;
    %通配符代表0个或多个
    _占位符
    limit 开始行,页大小:分页
    问:一页10条记录?
    答:select * from emp limit 0,10;
    例:百度查询页数
    startRow = (pageNo -1)*pageSize;
    satartRow:开始行,默认是从0开始
    pageNo:用户输入页码
    pageSize:页面大小指的是一页多少条记录

  • DCL(Database Control Language)数据库控制语言
    添加权限: grant 权限 on 数据库表 to user1,user2;
    删除权限: revoke 权限 on 数据库表 to user1,user2;

  • 表的关联查询
    特点:查询表的个数两个或两个以上,因为某些需求是根据多个表的结果完成,通过外键来确定两个表之间的关系,从表具有主表的主键作为从表的外键
    sql92版本:对于表关联的查询支持的不完整
    内连接:inner 查询的是两个表的交集部分
    1.等值连接
    select * from beauty g,boys b where g.boyfriend_id = b.id;过滤条件有等号的
    2.不等值连接
    grade_level 级别号、lowest_sal最低工资、highest_sal 最高工资
    select ename , j.grade_level from emp e , job_drades j where e.sal beetwen j.lowest_sal and j.highst_sal;过滤条件没有等号
    3.自连接
    例:查询员工的领导编号
    select 领导.empno, 领导.ename, 员工.empno,员工.ename from emp 员工, emp 领导 where 员工.mgr = 领导.empno
    sql99版本
    内连接:inner
    1.等值连接:select * from 表A inner join 表B on 共有条件
    例:select * from beauty g inner join boys b on g.boyfriend_id = b.id;过滤条件有等号的
    2.不等值连接:select * from 表A inner join 表B on 不等值条件
    例:grade_level 级别号、lowest_sal最低工资、highest_sal 最高工资
    select ename , j.grade_level from emp e , job_drades j where e.sal beetwen j.lowest_sal and j.highst_sal ;过滤条件没有等号
    3.自连接:elect * from 表A inner join 表A on 条件
    例:查询员工的领导编号
    select 领导.empno, 领导.ename, 员工.empno,员工.ename from emp 员工 inner join emp 领导 on 员工.mgr = 领导.empno
    外连接:outer
    应用场景:用于查询一个表中有,另一个表没有的记录
    特点: 外连接的查询结果中主表是所有记录,如果从表中没有和他匹配的,则显示null,如果从表中有和他相匹配的,就显示匹配的值,外连接的查询结果也可以认识是,内连接+ 主表中有从表中没有的记录
    1.左外连接: left join on
    左边表为主表,右边表为从表
    例1: 查询男朋友 和 女朋友对象的信息
    select * from beauty t left join boys b
    on t.boyfriend_id = b.id
    例2:查询出 有男朋友的女明星
    select * from beauty t left join boys b
    on t.boyfriend_id = b.id
    where b.id is not null;
    例3:查询出 没有男朋友的女明星
    select * from beauty t left join boys b
    on t.boyfriend_id = b.id
    where b.id is null;
    2.右外连接:right join on
    左边表为从表,右边表为主表
    例:查询有女朋友的男明星
    select * from beauty t right join boys b
    on t.boyfriend_id = b.id
    3.全外连接:full join on (mysql不支持)
    全外连接 = 内连接 + 表1中有但是表2中没有的数据+表2中有单表1中没有的
    4.交叉连接:cross join 作用就是为了得到笛卡尔积现象,cross join on 过滤就和内连接结果一样
    例:select * from beauty t CROSS join boys b

  • 子查询
    特点:在一个sql语句中嵌套一个sql语句
    例1:查询管理者是King的 员工姓名和工资
    select ename,sal,job from emp where mgr = (select empno from emp where ename = ‘KING’);
    例2:查询出king所在部门的部门号\部门名称\部门人数
    elect e.deptno,dname,count(e.deptno) from emp e inner join dept d
    on e.deptno = d.deptno group by e.deptno
    having e.deptno = (select deptno from emp where ENAME = ‘KING’);

  • 联合查询
    特点:查询两个表的数据,将两个表的数据整合到一个结果集中,不适用关联查询,表格字段格式,顺序和数据类型要一致,这样查询才有意义。
    关键字: union 和 union all
    union:使用union时候会去重
    union all :不会去重
    格式:select 8 from 表名 union select * from 表名

  • 单行函数
    1.min(字段名); 取当前字段的最小值
    2.max(字段名); 取当前字段的最大值
    3.avg(字段名); 取当前字段的平均值
    4.sum(字段名); 求和
    5.count(); 计数器
    1)count(1);查询所有字段,只要有一个字段不是null就记录一个1,最后查询1的个数
    2)count(“string”);查询所有字段,只要有一个字段不是null就记录一个string,最后查询string的个数
    3)count(sal);查询当亲字段,如果字段不是null就+1,如果是null就不动,最后返回结果
    4)count( * );性能慢,将 *变成表结构的字段,再去查询,+1

  • 拓展
    表的复制
    1.复制表结构和数据
    create table 新建的表名 as select * from 想要复制的表名;
    2.复制表结构
    create table 新建的表名 as select * from 想要复制的表名 where 1=2;
    distinct:去重,最好修饰一个字段,修饰多了就没意义了
    数据库中的运算:
    1.select 1+1;=2
    2.select 2*3;=6
    3.select 2+’~’+3;=5
    4.select 2 + null;=null
    5.select ‘A’ + null;=null
    6.select ‘A’ + ‘B’;=0
    7.select ‘A’ + ’ '; =0
    8.字段is null,不能= null ,字段is not null ,ifnull(字段名, 0)才可以相加

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值