SQL语句

SQL语句

1. SQL定义

SQL(Structured Query Language)是一种用于管理和操作关系型数据库的编程语言。它用于执行各种数据库操作,包括:

  1. 查询数据:使用 SELECT 语句获取特定数据。

  2. 插入数据:使用 INSERT 语句向数据库中添加新记录。

  3. 更新数据:使用 UPDATE 语句修改现有记录。

  4. 删除数据:使用 DELETE 语句从数据库中删除记录。

  5. 创建和修改数据库结构:使用 CREATE, ALTERDROP 等语句管理数据库和表的结构。

SQL 是一种声明式语言,这意味着用户只需要指定“做什么”,而不需要说明“如何做”。它被广泛应用于各类数据库管理系统中,如 MySQL、PostgreSQL、SQLite、OracleMicrosoft SQL Server 等。

2. SQL分类

SQL 可以根据不同的功能和用途进行分类,通常分为以下几类:

2.1 数据定义语言DDL

  • 用于定义和管理数据库结构。

  • 主要语句:

    • CREATE:创建新表、视图、索引等。

    • ALTER:修改现有表的结构。

    • DROP:删除表、视图、索引等。

2.1.1 数据库
  • 创建数据库

create database db_name;
#创建数据库db_name
create database db_name default charset 'utf8';
#创建数据库并指定默认字符集为utf8
  • 删除数据库

drop database db_name;      #删除数据库db_name
  • 切换数据库

use db_name;        #切换到数据库db_name
2.1.2 表

创建表结构时需要在建表语句中指定字段、字段类型和约束条件等。

  • 创建表结构

create table tb_name (字段1 类型,字段2 类型,字段3 类型......);
例如:
create table student (id int primary key auto_increment not null,
                      name varchar(10) not null,
                      gender enum('男','女') default'男' not null,
                      height float(4,1) not null,
                      address text not null);
#id,name,gender,height,address等为字段名
#int,varchar,enum,float,text等为字段类型
#primary key,auto_increment,not null,default等为约束条件
  • 查看表结构

desc tb_name;       #查看表tb_name的结构
  • 修改表名

alter table tb_name rename to tb_name01;        #修改表名tb_name为tb_name01
  • 修改字段名

alter table tb_name change name alias varchar(10);  #修改字段名name为alias
  • 修改字段类型

alter table tb_name modify gender char(5);      #修改字段类型gender为char
  • 添加字段

alter table tb_name add (age int);          #添加age字段,类型为int
  • 删除字段

alter table tb_name drop address;           #删除address字段
  • 删除表

drop table tb_name;         #删除表tb_name
truncate table tb_name;     #删除表tb_name,效率比drop高,磁盘删除,不可回滚!
2.1.3 常见字段类型
数值类型
  • TINYINT: 1 字节,范围为 -128 到 127 或 0 到 255。

  • SMALLINT:2 字节,范围为 -32768 到 32767 或 0 到 65535。

  • MEDIUMINT:3 字节,范围为 -8388608 到 8388607 或 0 到 16777215。

  • INT:4 字节,范围为 -2147483648 到 2147483647 或 0 到 4294967295。

  • BIGINT:8 字节,范围为 -9223372036854775808 到 9223372036854775807 或 0 到 18446744073709551615。

  • FLOAT:4 字节,单精度浮点数,范围为 -3.402823466E+38 到 -1.175494351E-38,0,1.175494351E-38 到 3.402823466E+38。

  • DOUBLE:8 字节,双精度浮点数,范围为 -1.7976931348623157E+308 到 -2.2250738585072014E-308,0,2.2250738585072014E-308 到 1.7976931348623157E+308。

  • DECIMAL:变长的精确数值,支持 65 位整数位和 30 位小数位。

字符串类型
  • CHAR:定长字符串,最大长度为 255 个字符。

  • VARCHAR:变长字符串,最大长度为 65535 个字符。

  • BINARY:定长二进制字符串,最大长度为 255 个字节。

  • VARBINARY:变长二进制字符串,最大长度为 65535 个字节。空间会变小。

  • TEXT:变长字符串,最大长度为 65535 个字符。

  • BLOB:变长二进制字符串,最大长度为 65535 个字节。

  • ENUM:枚举类型,最多可以包含 65535 个值之一。

  • SET:集合类型,最多可以包含 64 个值之一。

日期/时间类型
  • DATE:日期,格式为 'YYYY-MM-DD'。

  • TIME:时间,格式为 'HH:MM:SS'。

  • DATETIME:日期和时间,格式为 'YYYY-MM-DD HH:MM:SS'。

  • TIMESTAMP:自动存储记录插入或更新的日期和时间,格式为 'YYYY-MM-DD HH:MM:SS'。

2.1.4 常见约束条件
  • NOT NULL:非空约束,用于约束该字段的值不能为空。

  • DEFAULT:默认值约束,用于约束该字段有默认值,约束当数据表中某个字段不输入值时,自动为其添加一个已经设置好的值。

  • PRIMARY KEY:主键约束,用于约束该字段的值具有唯一性,至多有一个,可以没有,并且非空。

  • UNIQUE:唯一约束,用于约束该字段的值具有唯一性,可以有多个,可以没有,可以为空。

  • CHECK:检查约束,用来检查数据表中,字段值是否有效。

  • FOREIGN KEY:外键约束,外键约束经常和主键约束一起使用,用来确保数据的一致性,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值。在从表添加外键约束,用于引用主表中某列的值。

  • AUTO_INCREMENT:自增,用于数字类型的列,自动为新插入的行生成唯一的值,常用于主键

2.2 数据操作语言DML

  • 用于操作数据库中的数据。

  • 主要语句:

    • INSERT:插入新记录。

    • UPDATE:更新现有记录。

    • DELETE:删除记录。

2.2.1 插入数据
insert into tb_name(字段1,字段2,字段3......) values(数据1,数据2,数据3......);
#字段和数据一一对应,有主键和默认值的字段可以跳过,自动添加默认值
例如:
insert into student(id,name,gender,height,address) values(1,"小张","男","175.4","中国上海");
#所有的字符串必须用引号
2.2.2 修改数据
update tb_name set 字段1=值1,字段2=值2...... where条件;
#使用where条件指定修改的区域范围
#where后可以灵活使用between and and or < > = <= >= != 等条件划定想要修改的范围
例如:
update student set height=“177.3”,address=“南京” where id=1;
#修改id=1一行的height和address字段数据
update student set name="小刘" where age>20 and gender="男";
#修改年龄大于20的男性名字为小刘
2.2.3 删除数据
delete from tb_name where条件;    #删除指定范围数据
delete from tb_name;             #删除表中所有数据
delete from student where height>="175.0";      #删除身高175及以上人员
delete from student;                #清空表格

2.3数据控制语言DCL

  • 用于控制对数据的访问权限。

  • 主要语句:

    • GRANT:授予权限。

    • REVOKE:撤销权限。

2.3.1 创建用户
create user 'username'@'localhost' identified by "password";
#username   用户名
#password   密码
#localhost  本地登录,可以设置为IP地址(指定登录IP),网段(网段内IP均可登录),%(所有IP)
例如:
create user 'liming'@'%' identified by "Liming@123";
2.3.2 用户授权
grant 权限1,权限2...... on 库名.* to 'username'@'localhost';
#权限指命令权限,create,delete,alter等,可以使用all,代表所有权限
#库名指某个库,database_name,可以使用*,代表所有库
例如:
grant create,drop on db_name.* to 'liming'@'%';     
#授予liming对db——name库create和drop命令的权限
grant all on *.* to 'liming'@'%' identified by "Liming@123";
#授予liming对所有库的所有权限,授予所有权限时要加上用户密码
2.3.3 撤销授权
revoke 权限1,权限2...... on 库名.* to 'username'@'localhost';
#用法同grant
2.3.4 查看权限
show grants for 'username'@'localhost';     #查看用户权限
2.3.5 修改用户密码
alter user 'username'@'localhost' identified by "password";     #修改用户密码

2.4 数据查询语言DQL

  • 主要用于查询数据。

  • 主要语句:SELECT

2.4.1 基础查询
select * from tb_name;      #查询所有列
select age,name,height from tb_name;        #查询指定列
2.4.2 条件查询
select 字段 from tb_name where 条件;
#where条件灵活组合以下判断来指定范围:
        and                 #和
        or                  #或
        between a and b     #在a和b之间
        in                  #在...之内
        is null             #为空
        not ... is null     #不为空
        = > < >= <= !=      #等于,大于,小于,大于等于,小于等于,不等于
NULL说明:
1、等价于没有任何值、是未知数。
2、NULL与0、空字符串、空格都不同,NULL没有分配存储空间。
3、对空值做加、减、乘、除等运算操作,结果仍为空。
4、比较时使用关键字用“is null”和“is not null”。
5、排序时比其他数据都小,所以NULL值总是排在最前。
2.4.3 模糊查询
select 字段 from tb_name where like "张%%";    #查询姓张的人员记录
# %是通配符,表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,使用两个百分号(%%)表示。
# _ 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字 符长度语句。
2.4.4 去重
select distinct 字段 form tb_name;
#查询某个字段时可能会出现重复的记录,如一样的名字,一样的身高等,加distinct去重
2.4.5 排序
select * from tb_name order by 字段;          #按字段内容大小排序显示查询内容
select * from tb_name order by 字段 desc;     #加desc按倒序显示
2.4.6 四则运算
select 字段*3,字段/3 from tb_name;          #查询时可对字段记录做四则运算处理
2.4.7 聚合函数
count():统计指定字段不为 NULL 的记录行数
max():计算指定字段的最大值
min():计算指定字段的最小值
sum():计算指定字段的数值和
avg():计算指定字段的平均值

select count(*) from tb_name; 
2.4.8 定义显示格式
concat():函数用于连接字符串
select concat(name,"年工资为 ",salary*12) from tb_name;
#将两个字段的查询结果拼接到同一列
​
as:别名
select concat(name,"年工资为 ",salary*12) as yearly_salary from tb_name;
#拼接后字段名不美观,通常使用as定义别名
2.4.9 分组
select 字段1,字段2 from tb_name group by 字段3;
#字段3一般为组编号字段,分组后会将相同的编号分到同一组,不同的编号分为不同组,便于统计
2.4.10 限定查询
select * from tb_name limit 4,10;
#查询十行记录,从第四行开始
2.4.11 多表联查
1、内连接(INNER JOIN)
select * from tb_a inner join tb_b on a.字段1=b.字段2; 
#返回两个表中匹配的记录
2、左连接 (LEFT JOIN)
select * from tb_a left join tb_b on a.字段1=b.字段2;
#返回左表的所有记录和右表中匹配的记录。如果右表没有匹配,则结果为NULL。
3、右连接 (right JOIN)
select * from tb_b left join tb_a on a.字段1=b.字段2;
#返回右表的所有记录和左表中匹配的记录。如果左表没有匹配,则结果为NULL。
4、多表连接
select * from tb_a 
inner join tb_b on a.字段1=b.字段2 
inner join tb_c on b.字段2=c.字段3
#可以在一个查询中联接多个表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值