SQL语句分为以下三种类型:
- DML: Data Manipulation Language数据操纵语言
- DDL: Data Definition Language数据定义语言
- DCL: Data Control Language数据控制语言
DML
DML用于查询与修改数据记录,包括如下SQL语句:
- INSERT:添加数据到数据库中
- UPDATE:修改数据库中的数据;
- DELETE:删除数据库中的数据
- SELECT:选择(查询)数据
SELECT是SQL语言的基础,最为重要。
查询表的所有内容
DDL
DDL用于定义数据库的结构,比如创建、修改或删除数据库对象,包括如下SQL语句:
- CREATE TABLE: 创建数据库表
- ALTER TABLE: 更改表结构、添加、删除、修改列长度
- DROP TABLE: 删除表
- CREATE INDEX:在表上建立索引
- DROP INDEX:删除索引
DCL
DCL用来控制数据库的访问,包括如下SQL语句:
- GRANT:授予访问权限
- REVOKE:撤销访问权限
- COMMIT:提交事务处理
- ROLLBACK:事务处理回退
- SAVEPOINT:设置保存点
- LOCK:对数据库的特定部分进行锁定
数据库
1.查看数据库
show databases;
2.新建数据库oo
create database oo;
3.使用数据库oo
use oo;
4.创建表
在数据库oo中创建txt表
create table txt(id int(8),name varchar(20),city varchar(20),score int(5));
5.插入数据
在表txt中增加数据(在txt中插入下面五行数据)
Insert into txt(id,name,city,score) values (1,"xiaowang","henan",80);
Insert into txt(id,name,city,score) values (2,'xianliu','wuhan',81);
Insert into txt(id,name,city,score) values (3,'xiaozheng','henan',83);
Insert into txt(id,name,city,score) values (4,'xiaowu','beijing',84);
Insert into txt(id,name,city,score) values (5,'xiaojing','henan',85);
6.查询表
插入成功后查询表txt
select * from txt;
1.查询表的某一字段
查询表中的name 和 score字段
select name,score from txt;
查询 name 为小郑的学生的分数
select score from txt where name="xiaowang";
2.排序 order by
升序 ASC
降序DESC
将txt表中的分数按照降序排列
select * from txt order by score desc;
显示按照某一列的升序结果
格式:select 列名1,列名2,列名3... fron 表名 order by M(M为数字,必须小于或等于n(数据库查询的字段数才会正常显示,否则数据库将报错)
select id,name,city,score from txt order by 1;
select id,name,city,score from txt order by 3;
M不满足条件的话会报错
select id,name,city,score from txt order by 5;
3.limit的用法
基本格式:limit M N //表示从第M+1条数据开始,顺序往下查询N条数据
limit M //表示查询前M条数据
查询表中前2条数据:
select * from txt limit 0,2;
从第2条数据起,往下查询3条数据的id、name和score字段
select id,name,score from txt limit 1,3;
7.删除表
在txt中删除一条语句
如删除id=1的数据,其命令为
delete from txt where id=1;
8.修改表
修改txt中的1条数据
如:修改id=2的数据,将其score设置为80
update txt set score=80 where id=2;
4.数据库去重
mysql
原表:
去掉 city 重复的数据,根据 city 分组,查找出id最小的,然后再查找 id 不包含刚才查出来的。这样就查询出了所有的重复数据(留下的数据是id最小的那一行)
delete from txt where id NOT IN (select tt.id from (select min(c.id) as id from txt c group by name) tt);
去重 city 后的表:
oracle
--方法1:
--常用的关键字:distinct
--缺点:只能应对单个字段去重,多个字段查询还是会有重复数据
select distinct t.user_name, t.user_age from TEST_USER t;
--方法2:
--思路:给重复的数据建立有序下标,然后只查询下标为:1的数据即可
select f.user_name, f.user_age
from (select t.*,
row_number() over(partition by user_name order by user_name) as group_idx
from TEST_USER t) f
where f.group_idx = 1;
方法1查询结果:
方法2查询结果:
创建测试数据
create table nayi224_180824(col_1 varchar2(10), col_2 varchar2(10), col_3 varchar2(10));
insert into nayi224_180824
select 1, 2, 3 from dual union all
select 1, 2, 3 from dual union all
select 5, 2, 3 from dual union all
select 10, 20, 30 from dual ;
commit;
select*from nayi224_180824;
针对指定列,查出去重后的结果集
1. distinct
select distinct t1.* from nayi224_180824 t1;
方法局限性很大,因为它只能对全部查询的列做去重。如果我想对col_2,col3去重,那我的结果集中就只能有col_2,col_3列,而不能有col_1列。
select distinct t1.col_2, col_3 from nayi224_180824 t1
2. row_number()
去掉t1.col_2, 和 t1.col_3内容相同的部分
select *
from (select t1.*,
row_number() over(partition by t1.col_2, t1.col_3 order by 1) rn
from nayi224_180824 t1) t1
where t1.rn = 1
;
原文章:MySQL数据库基础命令_冰 雪的博客-CSDN博客_数据库命令