SQL学习

SQL介绍

1.什么是SQL ?

  • Structured Query Languange:结构cmd化查询语言

其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。

2.SQL通用语法

  1. SQL语句可以单行或多行书写,以分号结尾。
  2. 可使用空格和缩进来增强语句的可读性。
  3. MySQL数据库的SQL 语言不区分大小写,关键字建议使用大写。
  4. 3种 注释
  • 单行注释:** -- **注释内容 或 # 注释内容(mysql特有)
  • 多行注释:** /* 注释 /*
  • /*! ... */

5.退出命令

quit;     
exit;
ctrl + Z

3.SQL分类

1.DDL(Data Definition Language)数据定义语言

  • 用来定义数据库对象:数据库、表、列等。关键字:create,drop,alter,show,use等

2.DML(Data Manipulatio Language)数据操作语言

  • 用来对数据库中表的数据进行增删改。关键字:insert,delete,update 等

3.DQL(Data Query Language)数据库查询语言

  • 用来查询数据库中表的记录(数据)。关键字:select,where 等

4.DCL(Data Control Language)数据控制语言(了解)

  • 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANY,REVOKE 等。

SQL操作

操作数据库

创建

1.创建数据库
2.数据库是不区分大小写ABC001 和 abc001是一样的;
3.命令也不区分大小写;
4.创建数据库的时候,名字的命名,只能是a-z,0-9,_ 组成,不能出现特殊字符,最好也不要用纯粹的0-9来命令,建议使用a-z,更具具体的事物去命名;

create database 数据库名称; --创建数据库
show databases; --显示数据库
drop database 数据库名称; --删除数据库
  • 创建数据库,判断不存在,再创建:
create database if not exists 数据库名称;
  • 创建数据库,并指定字符集
create database 数据库名称 character set 字符集名;
  • 练习:创建db3数据库,判断是否存在,并指定字符集为gbk
create database if not exists db3 character set gbk;
mysql> create database abc003 character set gbk;
Query OK, 1 row affected (0.00 sec)

查询

  • 查询所有数据库名称
show databases;
  • 查询某个数据库的字符集:查询某个数据库的创建语句
show create database 数据库名称;

修改

  • 修改数据库的字符集
alter database 数据库名称 character set 字符集名称;

删除

  • 删除数据库
drop database 数据库名称;

使用

  • 查询当前zhen正在使用的数据库名称
select database(); --查询当前使用的数据库
use 数据库名; --使用该数据库

操作表

use 数据库名称; --使用一个数据库
select database(); --查看当前数据库

show tables; --查看表
desc 表名; --查看列

创建

  • 语法

create table 表名(
列名1 数据类型1,
列名2 数据类型2,
...
列名n 数据类型n
);-- 在创建一个数据表的时候,必须加上列名和数据类型,不然会报错;

最后一列,不需要加逗号

  • 数据类型
1.int:整数类型
age int,-- 用的最多的 默认字符是11个,可以自己手动添加 age int(99); 最大 255
2.double:小数类型
score duoble(7,3) -- 前面大于等于后面
ERROR 1427 (42000): For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column 'score').
3.date:日期,只包含年月日,yyyy-MM-dd
4.datatime:日期,包含年月日时分秒 ,yyyy-MM-dd HH:mm;ss
5.timestamp:时间类型包含年月日时分秒 yyyy-MM-dd HH:mm;ss
如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
6.varchar:字符串
name varchar(20):姓名最大20的字符 -- varchar后必须定义字符长度,不然会报错
cainiao 7个字符 张三 2个字符
char 
  • 创建表
create table student(
id int,
name varchar(37),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);

create table student(id int(99),name varchar(37),score double(4,1),birthday date,insert_time timestamp);

  • 复制表
create table 表名 like 被复制的表名;

查询

  • 查询某个数据库中所有的表名称
show tables; --查询表
  • 查询表结构
    desc 表名; --查询表中的列结构

修改

  • 修改表名
alter table 表名 rename to 新的表名;
  • 修改表的字符集
alter table 表名 character set 字符集名称;

删除

drop table 表名; --删除表

DDL:修改列

添加一列
alter table 表名 add 列名 数据类型;
修改列名称 类型
alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型;
删除列
alter table 表名 drop 列名;
查看列
desc 表名; -- 查看列

DML:增删改表中的数据

1.添加数据:

- 语法:

```mysql
insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
  • 注意:

1.列名和值要一一对应。
2.如果表名后,不定义列名,则默认给所有列添加值。

insert into 表名 values(值1,值2,...值n);

2.删除数据:

  • 语法:
delete from 表名 [where 条件]
delete from abc003 where id=1; -- 删除表abc003列中id=1值
  • 注意:
  1. 如果不加条件,则删除表中所有记录。
  2. 如果要删除所有记录
  • delete from 表名;-- 不推荐使用。有多少条记录就会执行多少次删除操作。
  • TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。

3.修改数据

  • 语法:
update 表名 set 列名1 = 值1,列名2 = 值2,...[where 条件];
update abc003 set age=99 where id=3; -- 将表abc003中id=3的age的值修改为99

注意:

  • 如果不加任何条件,则会将表中所有记录全部修改。

DQL:查询表中的字段

select * from 表名;

1.语法

select 
  字段列表
from
  表名列表
where 
  条件列表
group by
  分组字段
having
  分组之后的条件
order by
  排序
limit 
  分页限定
group_concat()
  分组查询

2.基础查询

  1.多个字段的查询

select 字段名1,字段名2... from 表名;

注意:

  • 如果查询所有字段,则可以使用*来替代字段列表。

  2.去除重复

distinct
SELECT DISTINCT country FROM Websites;
SELECT * FROM Websites WHERE country='CN'AND alexa > 50;
SELECT * FROM Websites WHERE alexa > 15 AND (country='CN' OR country='USA');

条件查询where

参考链接

posted @ 2023-01-09 20:45  gvpn  阅读(63)  评论(0编辑  收藏  举报