MYSQL下SQL的一些整理
发布日期:2022-02-01 14:28:14 浏览次数:42 分类:技术文章

本文共 4764 字,大约阅读时间需要 15 分钟。

应开发部门一个小MM的要求。整理了一份SQL的文档,内容很初级。但老手都知道,sql的命令不外乎那么几个,但却可以实现任何对数值的统计和排列。呵呵,专家往往都是钻研了一些看似很简单的东西,比如说ITPUB上newkid,还有几位版主。
如果有时间,再来整理一下MSYQL的引擎,备份恢复,参数说明文档吧

Mysql之sql总结

前言

本文档是对SQL语法的一些总结,如没做特别说明,此SQL仅适用于MYSQL较高版本数据库。总结包括以下几个部分。

SQL指令:SQL如何被用来存储,读取,以及处理存放数据库之中的资料

表格处理:SQL如何来处理数据库中的表格

SQL语法:提列出部分常用的SQL语法

SQL分类

首先了解一下SQL分类,根据SQL的作用不同,可以分为以下三类

Ø       数据库定义语言(DDL)

Create ,alter,drop,truncate

Ø       数据库操纵语言(DML)

Select ,insert ,update,delete

Ø       数据库控制语言(DCL)

Grant,revoke,commit,rollback

DDL

定义数据库,定义表结构,视图时使用,如

Create table ttt…..

Alter index …..

Drop view…….

Truncate table …..(注意,此操作本质是先drop掉,在重新建表的过程,会重置高水位线)

DML

网上有几种版本,有的把select归结为DQL语言,实际上,这是个很迷糊的概念。举个例子来解释吧,人本来只分男和女,可偏偏有了李宇春,曾轶可,姚小君这样不男不女的人…..呵呵

如果要从数据表中查询出需要的结果,可以用select xxx from  ttt where condition………子句。

插入数据:insert into tab_name (col1,col2…)  values (val1,val2…..)

修改数据:update table set col=val1….

删除数据:delete from table where ……

DCL

对用户授权,回收特权,以及对事务的操作,例如

Grant insert,delete,update on db1.* to identified by ‘aiyaya’;

 

 

一些常用的SQL语法

在讲解SQL语法之前,先创建一张temp表

Create table temp(

Id int,

Dep varchar(20),

Name varchar(300)

)

select

select * from temp  where condition

select version(); ----查询当前数据库版本

select now();------查询当前时间

select 100/1000;-------select数值运算

select distinct

select distinct dep,name  from temp

distinct关键字对后面跟着的所有字段去重复

select where

select *  from  temp  where id>100

sql and or

select *  from temp  where ( id>1 and id<100 ) or (id>400 and id <600)

--------查询出表tab_name中id在1到100和400到600之间的数据

in&exists(not in&not exists)

select * from tab1 where id in (22,33,44)

select * from tab1 a where exists( select 1 from tab2 b where a.id=b.id)

sql between

select * from temp  where id between 1 and 100

sql like

select * from temp  where dep like ‘%运维%’

select * from temp  where dep like ‘运维%’

select * from temp  where dep like ‘%运维’

sql order by & group by &having

select * from temp order by id desc (按照ID排序,默认为升序)

select * from temp group by dep -----按dep分组

select id,dep,count(1)  from temp order by id group by dep having count(1)>1

having 分组过滤,在查找重复数据时很有用。

sql union& union all

select * from temp where id<100

union

select * from temp where id >1000

union 和 union all 的区别是unoin会去重复

sql case

select case dep

when ‘运维部’ then 1

when ‘市场部’ then 2

when ‘财务部’ then 3

else null

end dep_n

sql if &ifnull & nullif

Sql中IF实现的判断

SELECT IF(1>2,2,3);如果1>2为真,则为2,否则为3。这个语句返回的结果为3

SELECT IF(1<2,'yes ','no');同上

Sql中IFNULL实现的判断

SELECT IFNULL(1,0);如果1=0,则返回1,否则返回0.这个语句返回的结果为0

SELECT IFNULL(NULL,10);同上

SELECT IFNULL(1/0,'yes');同上

Sql 中nullif实现的判断

SELECT NULLIF(1,2);如果1=2为真,则返回null,否则返回1,这个语句返回的结果为1

SELECT NULLIF(1,1);返回值为null

insert

inert into temp values(11,’运维部’,’myth’)

insert into temp select 11,’运维部’,’myth’;

insert into temp values

(11,’运维部’,’Myth’),

(12,’市场部’,’Bob’)

(13,’财务部’,’Kate’)

update

Update temp set name=’What’ where id=11;

Update temp1,temp2 set temp1.name=temp2.name

Where temp1.id=temp2.id;

delete

delete from temp where id=11;

delete from temp1,temp2 where temp1.id=temp2.id

limit

select * from temp order by id limit 10

limit常作为分页的关键字

select into outfile

把数据导入到操作系统外部文件

Select * from temp into outfile “/home/temp/temp.txt”

Load data infile

把外部文件中的数据导入到数据库,类似ORACLE的 sqlldr,MSSQL的DTS工具

Load data infile ‘/home/temp/temp.txt’  into table temp (col1,col2,col3….)

……………..

一些常见的系统命令

show

show是mysql里一个非常有用的指令。它不可以归结为sql命令。它是mysqlDB系统命令。通过这个命令可以查看数据库当前的一些信息,如

show database------------查看数据库列表

show tables---------查看当前数据下的表清单

show user;------查看当前连接用户

show variables;------查看系统变量

show processlist;-----查看当前链接信息

show status------查看系统当前信息

show grants for username-----查看用户的权限

use

show databse

use db_name

analyse

当频繁的对大数据表进行操作后,可能需要对索引进行修复,此时可以使用analyse语句。

Analyse  table  table_name;

Repair

用于修复表,仅对myIsam和archive表引擎有作用

Repair table table_name

Check

数据库发生错误,索引没有同步更新,写入磁盘出错。可能需要对表进行检查

Check table table_name

Optimize

经常更新数据的磁盘需要整理碎片,数据库也是这样,Optimize Table语句对MyISAM和InnoDB类型的表都有效。

Optimize table table_name

SP,Funcation,Trigger语法

Store procedure

创建SP语法:

CREATE PROCEDURE sp_name ([proc_parameter[,...]])

    [characteristic ...] routine_body

例如:

mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)

    -> BEGIN

    ->   SELECT COUNT(*) INTO param1 FROM t;

    -> END

è  //

mysql> CALL simpleproc(@a);

Funcation

创建funcation语法

CREATE FUNCTION sp_name ([func_parameter[,...]])

    RETURNS type

[characteristic ...] routine_body

例如:

mysql> delimiter //

mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)

    -> RETURN CONCAT('Hello, ',s,'!');

    -> //

Query OK, 0 rows

mysql> SELECT hello('world');

Trigger

创建存储过程语法:

CREATE TRIGGER trigger_name trigger_time trigger_event

ON tbl_name FOR EACH ROW trigger_stmt

例如:

DELIMITER

CREATE TRIGGER testref BEFORE INSERT ON test1

  FOR EACH ROW BEGIN

    INSERT INTO test2 SET a2 = NEW.a1;

    DELETE FROM test3 WHERE a3 = NEW.a1; 

    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;

  END

DELIMITER ;

数据库管理

 

转载地址:https://blog.csdn.net/shunlu/article/details/8241935 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:EF分页方法
下一篇:sql server检查临时表是否存在

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月06日 16时07分37秒