MySQL的SQL语句
序言
本文并非教学使用,仅是为了便捷使用MySQL语句,和防止遗忘所写的,我对纯大写不敏感,所以基本我写sql语句都是使用小写,有我知道或我记得的便捷SQL语句就会记下来。
注:
①由于SQL对于大小写不敏感,所以命令及表名之类的是大写还是小写都无所谓,仅限于命令,表格数据使用大小写方便我们的查看;
②大多操作符不是仅能查看,也能运用在其他语句,比如插入,更新等。
非 常用命令
创建数据库
CREATE DATABASE 数据库名;
example:
create database mydata;
删除数据库
DROP DATABASE 数据库名;
example:
drop database mydata;
选择数据库
说明:只有选择了才可以对该数据库进行操作
USE 数据库名;
example:
use mydata;
查看数据库
可查看所有已创建的数据库,可使用操作符
SHOW DATABASES;
example:
show databases;
查看数据库中的表格
可查看所有已创建的数据库表格,可使用操作符
SHOW TABLES;
example:
show tables;
show tables like '%le';
查看表格的列数
select count(*) from information_schema.columns where table_schema = '数据库名' and table_name = '表名';
example:
select count(*) from information_schema.columns where table_schema = 'mydata' and table_name = 'myTable';
查看表格的类型(创建后)
DESC/DESCRIBE 表名;
.
创建(create)
简单创建表
create table myTable
(
id int(5), //10000
age decimal(5,2), //100.00
name varchar(20), //可20个汉字或20个字母,不限字类型,只限制个数
time date //默认yyyymmdd,20220322-》2022-03-22
);
.
创建索引
create index 索引名 on 表名(该表的列名);
.
创建主键
一是直接在创建表格的时候,在其类型后增加即可;
二是在末尾的地方加上即可。
id int(50) primary key not null,
...
或者
id int(50) not null,
age int(50) not null,
...
primary key(id)
primary key(id, age)
.
删除(delete)
简单删除表里数据
delete from myTable;
delete * from myTable
删除表格
drop table if exists myTable;
查看(select)
简单查看
select * from myTable;
不重复查看(distinct)
说明:所查询的所有数据全都不重复才会显示
select distinct * from myTable;
排序查看(order by (DESC/ ASC)
//DESC逆序,ASC顺序
select * from mytable order by id DESC, age ASC;
AND和OR查看
//同时满足两个条件才会显示
select * from mytable where id = 10000 and age = 34.23;
//两个条件满足其一即可显示
select * from mytable where id = 10000 or age = 48.00;
//必须满足第三条件,前两个条件至少满足其一即可显示
select * from mytable where ( id = 10000 or id = 10001 ) and age = 23.33;
Top前几查看(limit)
//输出插入的顺序前两个
select * from mytable limit 2;
//按id顺序排序后的前两条数据
select * from mytable order by id limit 2;
模糊查看(like)
/*
*'%a' //以a结尾的数据
*'a%' //以a开头的数据
*'%a%' //含有a的数据
*'_a_' //三位且中间字母是a的
*'_a' //两位且结尾字母是a的
*'a_' //两位且开头字母是a的
*/
select * from myTable where name Like '马%梅';
//查找王/赵/李/梁任一开头的名字
select * from mytable where name like '[王赵李梁]%';
//下两条等同,凡姓王/赵/李/梁的都不显示
select * from mytable where name like '[^王赵李梁]%';
select * from mytable where name like '[!王赵李梁]%';
IN查看(in)
//查找name列为王大爷或者赵奶娘的行数据
select * from mytable where name in ( '王大爷', '赵奶娘');
between查看(between … and …)
//范围: >=10001 && <= 10003
select * from mytable where id between 10001 and 10003;
//范围:<10001 && > 10003;
select * from mytable where id not between 10001 and 10003;
//下两条等同
select * from mytable where id not between 10001 and 10001;
select * from mytable where id not in(10001);
.
连接(join)
交叉连接(cross join)
select * from mytable cross join mytable2;
效果是:mytable的每一行,都会逐条对应mytable2的所有行数据,如下效果
A | B |
---|---|
mytable1_1 | mytable2_1 |
mytable1_1 | mytable2_2 |
mytable1_1 | mytable2_3 |
mytable1_2 | mytable2_1 |
mytable1_2 | mytable2_2 |
mytable1_2 | mytable2_3 |
内连接(inner join)
select * from mytable inner join mytable2 on mytable.id = mytable2.id;
用法如上,效果就是on后面的命令相同的行信息则合并,不满足条件的略掉,mytable在前,mytable2在后,*处可以自由更改列显示
外连接(outer join)
略,待补充
.
更新(update)
简单更新
update myTable set id = 10001 where age = 23.33;
插入(insert)
简单插入
insert into myTable values( 10000, 23.33, '溪渣渣' , '20220322');