sql语句常用命令以及举例

SQL是一种结构化查询语言,用于与关系型数据库进行交互。以下是一些基本的SQL语句,希望能帮助你入门:

1.创建表格

 CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
    ....
);

例如,创建一个名为"customers"的表格,其中包含"id"、"name"和"email"三列:

CREATE TABLE customers (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(255)
);
 

2.插入数据

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
例如,将一些客户数据插入到上面创建的"customers"表格中:

INSERT INTO customers (id, name, email)
VALUES (1, 'John Smith', 'john@example.com'),
       (2, 'Jane Doe', 'jane@example.com'),
       (3, 'Bob Johnson', 'bob@example.com');
 

3.选择数据

SELECT column1, column2, ...
FROM table_name;
例如,从"customers"表格中选择所有数据:

SELECT * FROM customers;
 

4.过滤数据

SELECT column1, column2, ...
FROM table_name
WHERE condition;
例如,从"customers"表格中选择所有名字为"John Smith"的客户:

SELECT * FROM customers WHERE name = 'John Smith';

5.更新数据

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

例如,将名字为"Bob Johnson"的客户的邮箱地址更新为"bob.johnson@example.com":

UPDATE customers
SET email = 'bob.johnson@example.com'
WHERE name = 'Bob Johnson';
 

6.删除数据

DELETE FROM table_name WHERE condition;

例如,删除名字为"Jane Doe"的客户:

DELETE FROM customers WHERE name = 'Jane Doe';

SQL是一种非常强大的语言,除了基本的查询、插入、更新和删除操作,还有许多高级的用法和语法可以学习。以下是一些SQL的高级用法和语法:

1.聚合函数

聚合函数是一组函数,用于对数据库中的数据进行聚合操作,如计算平均值、总和、最大值、最小值等。以下是一些常用的聚合函数:

  • AVG:计算某列的平均值。
  • COUNT:计算某列的行数。
  • MAX:返回某列的最大值。
  • MIN:返回某列的最小值。
  • SUM:返回某列的总和。

例如,计算"customers"表格中所有客户的平均年龄:

SELECT AVG(age) FROM customers;
 

2.JOIN

JOIN是一种SQL操作,用于将两个或多个表格中的数据连接起来。JOIN有多种类型,包括 INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN。

例如,连接"orders"表格和"customers"表格,获取每个客户的订单数:

SELECT customers.name, COUNT(orders.id) as order_count
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id
GROUP BY customers.name;

3.子查询

子查询是一种查询嵌套在另一个查询内部的查询,用于检索更复杂的数据。子查询通常用于WHERE子句或HAVING子句中。

例如,从"customers"表格中选择所有没有订单的客户

SELECT *
FROM customers
WHERE id NOT IN (SELECT customer_id FROM orders);
 

4.函数窗口

窗口函数是一种用于计算排名、分组、移动平均等操作的函数。它可以根据特定的排序规则对结果进行分组,而不会修改原始数据。

例如,计算每个客户的销售额排名:

SELECT name, sales, RANK() OVER (ORDER BY sales DESC) as rank
FROM customers
ORDER BY sales DESC;
 

这只是SQL的一些高级用法和语法,还有很多其他的高级功能,如视图、存储过程、触发器等。希望这些能够帮助你更深入地学习SQL。

1.视图View

视图是一种虚拟的表格,它不包含实际的数据,而是根据已有的表格产生的一个虚拟表格。视图的作用是隐藏表格的部分数据或对表格进行特定的筛选、汇总和排序操作,使得用户可以更方便地查询和操作数据库。

视图可以被视为一个只读的表格,因为用户不能直接向视图中插入、更新或删除数据,而只能通过操作视图中的数据来修改源表格中的数据。

例如,创建一个名为"customer_orders"的视图,它将"customers"表格和"orders"表格连接起来,并只选择客户的名字和订单数量:

CREATE VIEW customer_orders AS
SELECT customers.name, COUNT(orders.id) as order_count
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id
GROUP BY customers.name;
 

2.存储过程 Stored Procedure

存储过程是一段预编译的代码,它可以接收输入参数、执行一系列的SQL操作,并返回结果。存储过程通常用于执行复杂的数据操作和业务逻辑,可以减少数据库操作的时间和复杂性,并提高数据的安全性和可维护性。

存储过程可以像SQL查询一样被调用,可以使用变量和条件语句控制存储过程的执行。存储过程可以返回单个或多个结果集,并且可以在多个数据库操作中共享和重用。

例如,创建一个名为"get_customer_orders"的存储过程,它将客户的名字作为输入参数,并返回该客户的订单数量:

CREATE PROCEDURE get_customer_orders
    @customer_name VARCHAR(50)
AS
BEGIN
    SELECT COUNT(orders.id) as order_count
    FROM customers
    LEFT JOIN orders ON customers.id = orders.customer_id
    WHERE customers.name = @customer_name;
END
 

3.触发器Trigger

触发器是一种特殊的存储过程,它可以在特定的数据库操作(如插入、更新或删除数据)之前或之后自动执行一系列的SQL语句。触发器通常用于实现数据的约束和业务逻辑的处理。

触发器可以根据特定的事件(如INSERT、UPDATE、DELETE)在特定的表格上触发,可以用来检查数据的完整性、执行复杂的业务逻辑和记录数据的变化历史。

例如,创建一个名为"update_customer_sales"的触发器,它在更新"customers"表格中的销售额时自动更新"sales"表格中的销售数据:

CREATE TRIGGER update_customer_sales
ON customers
AFTER UPDATE
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
sql最全的常用命令语句 询某个数据库的连接数 select count(*) from Master.dbo.SysProcesses where dbid=db_id() --前10名其他等待类型 SELECT TOP 10 * from sys.dm_os_wait_stats ORDER BY wait_time_ms DESC SELECT *FROM sys.dm_os_wait_stats WHERE wait_type like 'PAGELATCH%' OR wait_type like 'LAZYWRITER_SLEEP%' --CPU的压力 SELECT scheduler_id, current_tasks_count, runnable_tasks_count FROM sys.dm_os_schedulers WHERE scheduler_id < 255 --表现最差的前10名使用查询 SELECT TOP 10 ProcedureName = t.text, ExecutionCount = s.execution_count, AvgExecutionTime = isnull ( s.total_elapsed_time / s.execution_count, 0 ), AvgWorkerTime = s.total_worker_time / s.execution_count, TotalWorkerTime = s.total_worker_time, MaxLogicalReads = s.max_logical_reads, MaxPhysicalReads = s.max_physical_reads, MaxLogicalWrites = s.max_logical_writes, CreationDateTime = s.creation_time, CallsPerSecond = isnull ( s.execution_count / datediff ( second , s.creation_time, getdate ()), 0 ) FROM sys.dm_exec_query_stats s CROSS APPLY sys.dm_exec_sql_text( s.sql_handle ) t ORDER BY s.max_physical_reads DESC SELECT SUM(signal_wait_time_ms) AS total_signal_wait_time_ms总信号等待时间 , SUM(wait_time_ms - signal_wait_time_ms) AS resource_wait_time_ms资源的等待时间, SUM(signal_wait_time_ms) * 1.0 / SUM (wait_time_ms) * 100 AS [signal_wait_percent信号等待%], SUM(wait_time_ms - signal_wait_time_ms) * 1.0 / SUM (wait_time_ms) * 100 AS [resource_wait_percent资源等待%] FROM sys.dm_os_wait_stats --一个信号等待时间过多对资源的等待时间那么你的CPU是目前的一个瓶颈。 --查看进程所执行的SQL语句 if (select COUNT(*) from master.dbo.sysprocesses) > 500 begin select text,CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle) from master.sys.sysprocesses a end select text,a.* from master.sys.sysprocesses a CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle) where a.spid = '51' dbcc inputbuffer(53) with tb as ( select blocking_session_id, session_id,db_name(database_id) as dbname,text from master.sys.dm_exec_requests a CROSS APPLY master.sys.dm_exec_sql_text(a.sql_handle) ), tb1 as ( select a.*,login_time,program_name,client_interface_name,login_name,cpu_time,memory_usage*8 as 'memory_usage(KB)', total_scheduled_time,reads,writes,logical_reads from tb a inner join master.sys.dm_exec_sessions b on a.session_id=b.session_id ) select a.*,connect_time,client_tcp_port,client_net_address from tb1 a inner join master.sys.dm_exec_connections b on a.session_id=b.session_id --当前进程数 select * from master.dbo.sysprocesses order by cpu desc --查看当前活动的进程数 sp_who active --查询是否由于连接没有释放引起CPU过高 select * from master.dbo.sysprocesses where spid> 50 and waittype = 0x0000 and waittime = 0 and status = 'sleeping ' and last_batch < dateadd(minute, -10, getdate()) and login_time < dateadd(minute, -10, getdate()) --强行释放空连接 select 'kill ' + rtrim(spid) from master.dbo.sysprocesses where spid> 50 and waittype = 0x0000 and waittime = 0 and status = 'sleeping ' and last_batch < dateadd(minute, -60, getdate()) and login_time < dateadd(minute, -60, getdate()) --查看当前占用 cpu 资源最高的会话和其中执行的语句(及时CPU) select spid,cmd,cpu,physical_io,memusage, (select top 1 [text] from ::fn_get_sql(sql_handle)) sql_text from master..sysprocesses order by cpu desc,physical_io desc --查看缓存中重用次数少,占用内存大的查询语句(当前缓存中未释放的)--全局 SELECT TOP 100 usecounts, objtype, p.size_in_bytes,[sql].[text] FROM sys.dm_exec_cached_plans p OUTER APPLY sys.dm_exec_sql_text (p.plan_handle) sql ORDER BY usecounts,p.size_in_bytes desc SELECT top 25 qt.text,qs.plan_generation_num,qs.execution_count,dbid,objectid FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(sql_handle) as qt WHERE plan_generation_num >1 ORDER BY qs.plan_generation_num SELECT top 50 qt.text AS SQL_text ,SUM(qs.total_worker_time) AS total_cpu_time, SUM(qs.execution_count) AS total_execution_count, SUM(qs.total_worker_time)/SUM(qs.execution_count) AS avg_cpu_time, COUNT(*) AS number_of_statements FROM sys.dm_exec_query_stats qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt GROUP BY qt.text ORDER BY total_cpu_time DESC --统计总的CPU时间 --ORDER BY avg_cpu_time DESC --统计平均单次查询CPU时间 -- 计算可运行状态下的工作进程数量 SELECT COUNT(*) as workers_waiting_for_cpu,s.scheduler_id FROM sys.dm_os_workers AS o INNER JOIN sys.dm_os_schedulers AS s ON o.scheduler_address=s.scheduler_address AND s.scheduler_id<255 WHERE o.state='RUNNABLE' GROUP BY s.scheduler_id
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值