SQL 基础(一)

  1. SQL定义
    SQL分类:数据库定义语言DDL、数据库操纵语言DML、数据库控制语言DCL;数据库查询语言DQL。
    DDL:数据定义语言,定义、修改、删除 数据库内部结构
    DML:数据操纵语言 ,对数据表记录 增加、删除、修改
    DCL:数据控制语言 用户授权、if 、while、事务管理
    DQL:数据查询语言 select查询语句

  2. 数据库SQL
    (1)创建数据库: create database 数据库名称;
    (2)查看所有数据库:show databases;
    (3)查看当前数据库编码集:show create database 数据库名;
    (4)删除数据库: drop database 数据库名称;
    (5)修改数据库编码:alter database 数据库名称 character set 编码集;
    (6)切换数据库:use 数据库名称;
    (7)查看当前使用数据库:select database();

  3. 数据表SQL
    select … from … where … group by … having … order by … ; 顺序固定的
    from 指定查询数据表
    where 前置过滤条件 — 将表数据过滤掉一部分
    group by 对where 过滤后数据进行分组
    having 对分组后结果添加条件过滤
    order by 对检索结果排序

(1)创建数据表
create table 表名(列名 类型(长度),列名 类型(长度) …) character set 编码集;

(2)查看表结构和约束:desc 表名;
约束类型:
主键约束—– primary key 不能为空、不能重复 ;主键数字类型,一般设置主键自动增长 mysql设置自动增长 auto_increment
唯一约束 —– unique 一张表只有最重要那个字段才能作为主键 ,不允许重复
非空 —– not null 值不能为空
例如:


create table employee (
id int primary key not null auto_increment ,
name varchar(40) unique not null,
gender varchar(10) not null,
birthday date not null,
entry_date date not null,
job varchar(20) not null,
salary double not null,
resume longtext not null );

(3)数据表修改
向已有数据表添加一列 :alter table 表名 add 列名 类型(长度) 约束;
改变已有数据表一列类型、长度: alter table 表名 modify 列名 类型(长度) 约束;
改变已有数据表一列的名称 : alter table 表名 change 旧列名 新列名 类型(长度) 约束;
删除已有一列 : alter table 表名 drop 列名;
修改表名: rename table 旧表名 to 新表名;
修改表的字符集:alter table student character set utf8;

(4)数据表删除:drop table 表名;

  1. 数据表增删改查
    (1)插入:insert into 表名(列名,列名, …. ) values(值, 值, ….) ;
    • 值个数应该列个数相同,值顺序和列顺序相同,值类型和列字段类型匹配
    • 插入数据时,字符串添加 单引号 ” — 字符和日期型数据应包含在单引号中
    • 在插入数据时,如果有些列存在默认值或者可以为null ,插入省略部分列 。

(2)更新:update 表名 set 列名=值,列名=值 where条件语句
update employee set salary = 3000 where name = ‘zs’;

(3)删除:delete from 表名 where 条件语句;
* 删除一个表所有记录 truncate 表名; 效果与 delete from 表名;
truncate与delete 使用上区别 ?
truncate 删除记录后不可恢复的,不受事务管理,原理:先删除整个表,重新创建
delete 可以被事务管理 ,在事务中删除数据可以回滚恢复,原理: 一行一行删除数据记录
truncate 删除所有记录性能上 好于 delete。
示例:
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> delete from employee;
Query OK, 3 rows affected (0.00 sec)
mysql> select * from employee;
Empty set (0.00 sec)
mysql> rollback;

(4)查询: select * | 指定列名,列名 from 表名;
基本查询:select distinct gender from employee; —- 查看employee表所有性别 ,排重

查询时进行运算:select 列名运算表达式 from 表名;
select 列名 as 列别名 from 表名;
select name,math+chinese+english as 总分 from scores; 使用别名表示学生分数

过滤查询条件:select math+chinese+english from scores where name=’老黎’; 使用where子句,进行过滤。

其他查询:
select * from scores where chinese <> 90; 查询语文成绩不为90 分学生
select * from scores where chinese between 70 and 80 ; 查询语文在70-80之间同学
select * from scores where chinese in (70,80,90);查询语文成绩为70分或者80分或者90分同学

like 模糊查询:
select * from scores where name like ‘老%’; 查询学生中姓“老”所有人 —– % 代表任意字符串
select * from scores where name like ‘老‘; 查询学生中 姓 老 名字为两个字 学生 — 代表任意单个字符

is null 判断一列是否为空
select * from scores where math is null; 查询无数学成绩所有人
select * from scores where math is not null; 查询有数学成绩人
null 代表1/2 —- 任何表达式和null 进行逻辑运算 结果都是false

逻辑运算中 and 和 or 优先级
select * from scores where 2>1 or 2>3 and 3>4 ; —- and先执行 SQL攻击

order by 对查询结果进行排序:select * from 表名 where条件语句 order by 列名 asc|desc , 列名 asc|desc … ; 默认是升序。

聚合函数 结合查询分组进行数据统计
count:返回查询结果记录条数 select count(*) from scores;
sum: 对一列的数据求和 select sum(math) from scores;
avg: 对一列数据求平均值 select avg(math) from scores;
max: 对一列数据 计算最大值 select min(math+chinese+english) from scores;
min: 对一列数据计算最小值 select max(math+chinese+english) from scores;

where 和 having 添加条件使用上区别 ?
where 是在分组之前执行,having是在分组之后执行,where 不能使用分组函数,having使用分组函数
* having可以替换where
5. 约束
数据库完整性约束 —– 保证数据表中记录完整性

主键约束 primary key : 用来指定数据表数据记录的唯一标识
唯一约束 unique : 该字段取值唯一
非空约束 not null ; 该字段值不能为null
外键约束 foreign key : 当两个数据表存在关联时,添加外键约束,外键约束引用另一张表主键
条件约束 check : mysql不支持 Oracle支持 check age<100 ; 向数据表存入age值,必须小于100

  • 完整性约束有5类
    外键约束:在employee表添加外键约束,使得dept_id的值 引用 dept的id字段 ,值不可以乱写
  • 外键通常引用另一个表主键
    为employee表添加一个外键约束
    alter table employee add foreign key (dept_id) references dept(id );
    添加了外键约束,就不能随便取值,取值是引用表存在主键值,不能随便删除数据

补充:数据库类型:
1) 整数类型 tinyint (byte) , smallint(short), int(int), bigint(long) ,float double

2) 字符串类型 varchar char 长度取值0-255 —- String
varchar变长 varchar(20) 向数据库存入hello ,因为变长,列长度会根据保存内容自动调整
char定长 char(8) —- 向数据库存入hello 因为定长 保存hello + 3个空格
* varchar经常使用,char性能更好

3) 逻辑性 bit 一位 — boolean *bit(8)表示8位 等于tinyint ,bit(32) 等于int

4) 日期型 date time datetime timestamp
date 只能保存日期
time 只能保存时间
datetime 日期和时间都有
timestamp 日期和时间都有,自动更新 —- 操作数据表,timestamp字段自动更新当前时间

5) 大数据类型 text、blob
text 文本类型数据,主要存储字符文件 — 文本文件
blob 二进制文件 ,存储任何类型文件(音乐、电影)
blob和text最大类型 longtext longblob 最大可以保存4GB文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值