SQL语法基础1(变量,表达式)
- 格式:doc
- 大小:39.00 KB
- 文档页数:3
SQL-变量#⼆、⾃定义变量/*说明:变量是⽤户⾃定义,不是系统的步骤:申明赋值使⽤(查看、⽐较、运算符)(1)⽤户变量作⽤域:针对于当前会话(连接)有效,同于会话变量的作⽤域---申明时必须初始化应⽤在任何地⽅,也就是begin end*/#1.1、声明并初始化#赋值的操作符:=或者:=SET@name='qq';SET@name:=1; #可以执⾏,弱类型SELECT@name:='qq';#1.2、赋值(更新⽤户变量的值)#(1)⽅式1:同上SET@name='qq';SET@name:='qq';SELECT@name:='qq';#(2)⽅式⼆:SELECT字段INTO变量名FROM表SELECT COUNT(*) INTO@countFROM `employees`;SELECT@count;#1.3、查看SELECT@count;#(2)、局部变量#作⽤域:仅仅在定义它的begin end中有效,应⽤在begin end的第⼀句话#1.1声明DECLARE变量名类型;#局部变量可以不初始化DECLARE变量名类型DEFAULT值;#1.2赋值#(1)⽅式1:SET NAME='qq';SET NAME:='qq';SELECT@name:='qq'; #注意select仍然要加@#(2)⽅式⼆:SELECT字段INTO局部变量名FROM表#1.3、查看SELECT ‘count’;#注意select不要加@#(3)局部和⽤户变量的对⽐作⽤域定义和使⽤的位置语法⽤户变量当前会话会话的任何地⽅必须加@,不⽤限定类型局部变量BEGIN END中只能BEGIN END中,且为第⼀句话⼀般不⽤加@,需要限定类型#练习,申明2个变量并赋值,求和并打印#(1)⽤户变量SELECT@count_1:=2;SET@count_2:=2;SELECT (@count_1+@count_2);#(2)局部变量BEGINDECLARE count_3 INT DEFAULT2;DECLARE count_4 INT DEFAULT2;DECLARE SUM INT;SET SUM=count_3 + count_4;END# 存储过程和函数/*类似Java中的⽅法好处:提⾼代码的重⽤⾏、简化操作#1.存储过程1.1含义:⼀组预先编译好的SQL语句,理解成批处理语句(减少了编译过程和数据库服务器的连接次数,节省时间)1.2语法:1.2.1 创建过程create procedure 存储过程名(参数列表)begin存储过程体(这⼀组合法的SQL语句)end注意1、参数列表包含三部分参数模式参数名参数类型举例:in stuname varchar(20)---参数模式:IN 该参数可以作为输⼊,也就是该参数需要调⽤⽅传⼊值OUT 该参数可以作为输出,也就是该参数可以作为返回值INOUT 该参数可以作为输出,也可以作为输⼊,也就是该参数急需要传⼊,⼜可以返回值2、如果存储过程体只有⼀句话,begin end 可以省略存储过程体的每条SQL语句的结尾要求必须要加分号存储过程的结尾可以使⽤ delimiter 重新设置语法:delimiter 结束标记1.2.2 调⽤call 存储过程名(实参列表);#案例:插⼊到girls.admin 表五条记录*/#案例1:插⼊到girls.admin 表五条记录(⽆参数列表)#定义存储过程:DELIMITER $CREATE PROCEDURE myp1()BEGININSERT INTO `admin`(`username`,`password`)VALUES('aa',11),('aa',11),('aa',11);END $#调⽤存储过程CALL myp1();#案例2:创建存储过程实现,⽤户是否登录成功(IN)#(1)定义存储过程DELIMITER $CREATE PROCEDURE login2(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))BEGIN#初始化DECLARE result INT DEFAULT0;#赋值SELECT COUNT(*) INTO resultFROM `admin`WHERE `admin`.`username` = `username`AND `admin`.`password` = PASSWORD;#查询SELECT IF(result >0,'成功','失败');END $#(2)调⽤存储过程CALL login2('aa','11') #这⾥不加分号,在cmd窗⼝加$# 案例3:根据⼥⽣名,返回对应的男神名(in,out)DELIMITER $CREATE PROCEDURE searchBoy(IN beautyname VARCHAR(20),OUT boyname VARCHAR)BEGINSELECT bo.`boyName` INTO boynameFROM `beauty` bINNER JOIN `boys` boON b.`boyfriend_id` = bo.`id`WHERE = beautyname;END $CALL searchBoy("李姐",@bName)SELECT@bName; #⽤户变量(@bName),需要赋值才能使⽤,这⾥的call也相当于赋值# 案例4:传⼊a和b两个值,最终a\b都返回(inout)DELIMITER $CREATE PROCEDURE myp2(INOUT number1 INT,INOUT number2 INT)BEGINSET number1 = number1*2;SET number2 = number2*2;END $SET@n1=10;SET@n2=20;CALL myp2(@n1,@n2)SELECT@n1,@n2;#⼆、⾃定义变量/*说明:变量是⽤户⾃定义,不是系统的步骤:申明赋值使⽤(查看、⽐较、运算符)(1)⽤户变量作⽤域:针对于当前会话(连接)有效,同于会话变量的作⽤域---申明时必须初始化应⽤在任何地⽅,也就是begin end*/#1.1、声明并初始化#赋值的操作符:=或者:=SET @name='qq';SET @name:=1; #可以执⾏,弱类型SELECT @name:='qq';#1.2、赋值(更新⽤户变量的值)#(1)⽅式1:同上SET @name='qq';SET @name:='qq';SELECT @name:='qq';#(2)⽅式⼆:SELECT 字段 INTO 变量名FROM 表SELECT COUNT(*) INTO @countFROM `employees`;SELECT @count;#1.3、查看SELECT@count;#(2)、局部变量#作⽤域:仅仅在定义它的begin end 中有效,应⽤在begin end的第⼀句话#1.1声明DECLARE 变量名类型;#局部变量可以不初始化DECLARE 变量名类型 DEFAULT 值;#1.2 赋值#(1)⽅式1:SET NAME='qq';SET NAME:='qq';SELECT@name:='qq'; #注意select仍然要加@#(2)⽅式⼆:SELECT 字段 INTO 局部变量名FROM 表#1.3、查看SELECT ‘count’;#注意select不要加@#(3)局部和⽤户变量的对⽐作⽤域定义和使⽤的位置语法⽤户变量当前会话会话的任何地⽅必须加@,不⽤限定类型局部变量BEGIN END 中只能 BEGIN END 中,且为第⼀句话⼀般不⽤加@,需要限定类型#练习,申明2个变量并赋值,求和并打印#(1)⽤户变量SELECT @count_1:=2;SET @count_2:=2;SELECT (@count_1 + @count_2);#(2)局部变量BEGINDECLARE count_3 INT DEFAULT 2;DECLARE count_4 INT DEFAULT 2;DECLARE SUM INT;SET SUM=count_3 + count_4;END# 存储过程和函数/*类似Java中的⽅法好处:提⾼代码的重⽤⾏、简化操作#1.存储过程1.1含义:⼀组预先编译好的SQL语句,理解成批处理语句(减少了编译过程和数据库服务器的连接次数,节省时间)1.2语法:1.2.1 创建过程create procedure 存储过程名(参数列表)begin存储过程体(这⼀组合法的SQL语句)end注意1、参数列表包含三部分参数模式参数名参数类型举例:in stuname varchar(20)---参数模式:IN 该参数可以作为输⼊,也就是该参数需要调⽤⽅传⼊值OUT 该参数可以作为输出,也就是该参数可以作为返回值 INOUT 该参数可以作为输出,也可以作为输⼊,也就是该参数急需要传⼊,⼜可以返回值2、如果存储过程体只有⼀句话,begin end 可以省略存储过程体的每条SQL语句的结尾要求必须要加分号存储过程的结尾可以使⽤ delimiter 重新设置语法:delimiter 结束标记1.2.2 调⽤call 存储过程名(实参列表);#案例:插⼊到girls.admin 表五条记录*/#案例1:插⼊到girls.admin 表五条记录(⽆参数列表)#定义存储过程:DELIMITER $CREATE PROCEDURE myp1()BEGININSERT INTO`admin`(`username`,`password`) VALUES('aa',11),('aa',11),('aa',11);END $#调⽤存储过程CALL myp1();#案例2:创建存储过程实现,⽤户是否登录成功(IN)#(1)定义存储过程DELIMITER $CREATE PROCEDURE login2(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))BEGIN#初始化DECLARE result INT DEFAULT 0;#赋值SELECT COUNT(*) INTO resultFROM `admin`WHERE`admin`.`username` = `username`AND `admin`.`password` = PASSWORD;#查询SELECT IF(result >0,'成功','失败');END $#(2)调⽤存储过程CALL login2('aa','11') #这⾥不加分号,在cmd窗⼝加$# 案例3:根据⼥⽣名,返回对应的男神名(in,out)DELIMITER $CREATE PROCEDURE searchBoy(IN beautyname VARCHAR(20),OUT boyname VARCHAR)BEGINSELECT bo.`boyName` INTO boynameFROM `beauty` bINNER JOIN `boys` boON b.`boyfriend_id` = bo.`id`WHERE = beautyname;END $CALL searchBoy("李姐",@bName)SELECT @bName; #⽤户变量(@bName),需要赋值才能使⽤,这⾥的call也相当于赋值# 案例4:传⼊a和b两个值,最终a\b都返回(inout)DELIMITER $CREATE PROCEDURE myp2(INOUT number1 INT,INOUT number2 INT)BEGINSET number1 = number1*2;SET number2 = number2*2;END $SET @n1=10;SET @n2=20;CALL myp2(@n1,@n2)SELECT @n1,@n2;。
sql 基础语法
摘要:
1.SQL 简介
2.SQL 的基本语法
2.1 数据定义
2.2 数据操作
2.3 数据查询
2.4 数据控制
正文:
【1.SQL 简介】
SQL(Structured Query Language,结构化查询语言)是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
SQL 是高级的非过程化编程语言,可以使程序员忽略系统的具体实现细节,只需指定数据的存储位置和存储方式,而不需要指定具体的存储方式和存取路径。
【2.SQL 的基本语法】
SQL 的基本语法包括数据定义、数据操作、数据查询和数据控制。
【2.1 数据定义】
数据定义主要是对数据库中的表进行定义,包括表名、列名、数据类型、主键和外键等。
数据定义的常用SQL 语句有CREATE TABLE、ALTER TABLE 和DROP TABLE 等。
【2.2 数据操作】
数据操作主要是对数据库中的数据进行添加、修改和删除等操作。
数据操作的常用SQL 语句有INSERT、UPDATE 和DELETE 等。
【2.3 数据查询】
数据查询是SQL 语言中最重要的功能之一,可以查询数据库中的数据,包括SELECT 语句和子查询等。
SELECT 语句是最基本的数据查询语句,可以查询表中的所有数据或者某一列的数据,也可以使用WHERE 子句进行条件查询。
【2.4 数据控制】
数据控制主要是对数据库中的数据进行控制,包括数据的访问权限、数据的备份和恢复等。
数据控制的常用SQL 语句有GRANT、REVOKE 和BACKUP 等。
T-SQL简介及基本语法⼀、T-SQL概述SQL Server⽤于操作数据库的编程语⾔为Transaction-SQL,简称T-SQL。
T-SQL与PL/SQL不同,并没有固定的程序结构。
T-SQL包括以下4个部分:DDL:定义和管理数据库及其对象,例如create、alter和drop等。
DML:实现对数据库表各对象的操作,例如insert、update等。
DCL:数据控制语⾔,实现对数据库进⾏安全管理和权限管理等控制,例如grant、revoke、deny等。
附加的语⾔元素。
T-SQL的附加语⾔元素,包括变量、运算符、函数、注释和流程控制语句等。
在T-SQL中,命令和语句的书写是不区分⼤⼩写的。
⼆、T-SQL编程基础1、标识符①T-SQL规则标识符由字母、数字、下划线、@、#、$符号组成,其中字母可以是a-z或A-Z,也可以是来⾃其他语⾔的字母字符。
⾸字符不能为数字和$。
标识符不允许是T-SQL保留字。
标识符内不允许有空格和特殊字符长度⼩于128②界定标识符 对于不符合标识符规则的标识符,则要使⽤界定符⽅括号([])或双引号(“”)将标识符括起来。
如标识符[My Table]、“select”内分别使⽤了空格和保留字select。
2、数据类型在SQL Server中提供了多种系统数据类型。
除了系统数据类型外,还可以⾃定义数据类型。
①系统数据类型(1)精确数字数据类型int 存储整型数值,存储数值范围为-231~231-1。
bigint bigint⽐int能存储更⼤的数值,存储数值范围为-263~263-1。
smallint 数据类型的范围数值⽐int更⼩,在-215~215-1之间。
定义这种数据类型的时候⼀定要⼩⼼,要确定存储的数据不会超过smallint所能存储的数值范围。
tinyint 数据类型的范围数值⽐smallint更⼩,存储从 0 到 255 的整型数据。
decimal/numeric decimal[(p,s)]和numeric[(p,s)]这两种数据类型⽤于存储相同精度和范围的数据(⼩数点的左、右两边存储的数值位数相同),所能存储的数值范围为-1038+1~1038-1。
基础sql语句1. SELECT: 用于查询表中的数据,可以使用通配符(*)表示所有列或者指定列名。
例子:SELECT * FROM table_name;2. FROM: 用于指定查询的数据来源,即需要查询哪张表。
例子:SELECT * FROM table_name;3. WHERE: 用于筛选满足条件的数据行,可以使用比较运算符(>,<,=,!=,>=,<=)等。
例子:SELECT * FROM table_name WHEREcolumn_name >= 10;4. ORDER BY: 用于将查询结果按照某个列进行排序,可以指定升序或降序(ASC或DESC)。
例子:SELECT * FROM table_name ORDER BYcolumn_name ASC;5. GROUP BY: 用于将查询结果按照某个列进行分组,通常使用聚合函数(SUM,COUNT,AVG,MAX,MIN)进行数据计算。
例子:SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;6. LIMIT: 用于限制查询结果的数量,只返回前几条数据。
例子:SELECT * FROM table_name LIMIT 10;7. JOIN: 用于将多张表按照共同的字段进行连接,可以有多种连接方式(INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL OUTER JOIN)。
例子:SELECT * FROM table1 LEFT JOIN table2 ONtable1.column_name = table2.column_name.。
sql中变量的写法
在SQL中,可以使用变量来存储和操作数据。
SQL中的变量写
法取决于所使用的数据库管理系统。
一般来说,大多数主流的数据
库管理系统(如MySQL,SQL Server,Oracle等)都支持类似的变
量写法,但语法可能会有所不同。
在大多数数据库管理系统中,声明变量的语法类似于以下形式: sql.
DECLARE @variable_name data_type;
其中,DECLARE关键字用于声明变量,@variable_name是变量
的名称,data_type是变量的数据类型。
在SQL Server中,变量名
通常以@开头。
另一种常见的变量赋值语法是使用SET关键字:
sql.
SET @variable_name = value;
这样就可以给变量赋值了。
另外,还可以直接在SQL语句中使用变量,例如:
sql.
SELECT column1, column2。
FROM table_name.
WHERE column3 = @variable_name;
这样就可以在SQL查询中使用变量了。
需要注意的是,不同的数据库管理系统可能对变量的使用有一些细微的差异,例如语法、作用域等方面,因此在实际使用中需要根据具体的数据库管理系统来编写和使用变量。
SQL语⾔⼊门内容来源:唐成. PostgreSQL修炼之道[M]. 机械⼯业出版社, 2015.此书购买链接:SQL(Structured Query Language)结构化查询语⾔1. 语法简介1.1 语句分类DDL (Data Definition Language)数据定义语⾔,主要⽤于创建、删除,以及修改表、索引等数据库对象语⾔。
DML (Data Manupulation Language)数据操作语句,主要⽤于插⼊、更新、删除数据,所以分为INSERT、UPDATE、DELETE三种语句。
DQL (Data Query Language)数据查询语句,基本就是SELECT查询语句,⽤于数据查询。
1.2 语法结构多条SQL语句之间⽤分号(;)隔开每个SQL命令有⼀些列的记号组成:关键字标识符双引号包围的标识符常量单引号包围的⽂本常量特殊的字符……2. DDL语句2.1 建表语句表⽰关系型数据库中最基本的对象,有很多列也有很多⾏,每⼀列有⼀个名字,不同的列有不同的数据类型。
建表语句的⼀个简单语法如下:CREATE TABLE table_name (col01_name data_type,col02_name data_type,col03_name data_type,col04_name data_type);其中CREATE和TABLE为关键字,表⽰创建表。
table_name为表名,col01_name col02_name col03_name col04_name分别表⽰列名。
data_type表⽰数据类型,不同的数据库系统有不同的数据类型名称。
变长的字符串在⼤多数数据库中都可使⽤varchar类型。
整形数据⼀般使⽤int类型。
⽇期类型使⽤date。
例如:CREATE TABLE score (student_name varchar(40),chinese_score int,math_score int,test_date date);在建表的时候,可以指定表的主键,主键是表中⾏的唯⼀标识,这个唯⼀标识,是不能重复的。
SQL数据库基础语法SQL语句的概述SQL语⾔的分类 数据定义语⾔(Data Definition Language)主要⽤于修改、创建和删除数据库对象,其中包括CREATE ALTER DROP语句。
数据查询语⾔(Data Query Language)主要⽤于查询数据库中的数据,其主要是SELECT语句,SELECT语句包括五个⼦句,分别是FROM WHERE HAVING GROUP BY和WITH语句。
数据操作语⾔(Data Manipulation Language)主要⽤于更新数据库⾥数据表中的数据,包括INSERT UODATE DELETE语句。
数据控制语⾔(Data Control Language)主要⽤于授予和回收访问数据库的某种权限。
包括GRANT REVOKE等语句。
事物控制语⾔,主要⽤于数据库对事物的控制,保证数据库中数据的⼀致性,包括COMMIT ROLLBACK语句。
常⽤的数据类型 MYSQL: SQL语句的书写规范 SQL语句中不区分关键字的⼤⼩写 SQL语句中不区分列名和对象名的⼤⼩写 SQL语句对数据库中数据的⼤⼩写敏感 SQL语句中使⽤--注释时,--后⾯⾄少有⼀个空格,多⾏注释⽤/* */ 数据库的创建与删除 (1)数据库的创建: CREATE DATABASE database_name; 在中书写SQL语句时,在SQL语句后⾯都要加上分号 (2)数据库的删除 DROP DATABASE database_name;数据表的创建与更新 数据库中的表 (1)数据记录:在数据表中的每⼀⾏被称为数据记录 (2)字段:数据表中的每⼀列被称为字段 (3)主键(PRIMARY KEY):作为数据表中唯⼀的表⽰,保证了每⼀天数记录的唯⼀性。
逐渐在关系数据库中约束实体完整性。
所谓实体完整性,是指对数据表⾏的约束。
(4)外键(FOREIGN KEY):外键⽤来定义表与表之间的关系。
一、定义变量--简单赋值declare @aintset@a=5print @a--使用 select 语句赋值declare@user1 nvarchar ( 50)select @user1=' 张三 'print @user1declare@user2 nvarchar ( 50)where ID =1 select @user2 = Name from ST_Userprint @user2--使用 update 语句赋值declare@user3 nvarchar ( 50)update ST_User set@user3 = Name where ID =1print @user3二、表、临时表、表变量--创建临时表 1create table#DU_User1([ID] [int]NOTNULL,[Oid] [int]NOTNULL,[Login] [nvarchar]( 50) NOTNULL,[Rtx] [nvarchar]( 4) NOTNULL,[Name] [nvarchar] ( 5)NOTNULL,[Password] [nvarchar] ( max)NULL,[State] [nvarchar] ( 8) NOTNULL);--向临时表 1 插入一条记录insert into #DU_User1 (ID,Oid, [Login] ,Rtx,Name, [Password] ,State) values ( 100, 2, 'LS' , '0000' , ' 临时 ' , '321' , ' 特殊 ' );--从 ST_User 查询数据,填充至新生成的临时表select * into #DU_User2 from ST_User where ID <8--查询并联合两临时表select * from #DU_User2 where ID <3 union select * from #DU_User1--删除两临时表drop table#DU_User1drop table#DU_User2--创建临时表CREATETABLE#t([ID] [int]NOTNULL,[Oid] [int]NOTNULL,[Login] [nvarchar]( 50) NOTNULL,[Rtx] [nvarchar]( 4) NOTNULL,[Name] [nvarchar] ( 5)NOTNULL,[Password] [nvarchar] ( max)NULL,[State] [nvarchar]( 8) NOTNULL,)--将查询结果集 ( 多条数据 ) 插入临时表insert into #t select * from ST_User--不能这样插入--select * into #t from dbo.ST_User--添加一列,为 int 型自增长子段alter table #t add [myid] int NOTNULL IDENTITY( 1, 1)--添加一列,默认填充全球唯一标识alter table #t add [myid1] uniqueidentifier NOTNULLdefault( newid()) select * from #tdrop table#t--给查询结果集增加自增长列--无主键时:select IDENTITY( int , 1, 1) as ID, Name,[Login] , [Password] into #t fromST_Userselect * from #t--有主键时:select ( select SUM( 1) from ST_User where ID <= a.ID)as myID, * from ST_User a order by myID--定义表变量declare @t table(id int not null ,msg nvarchar ( 50) null)insert into @t values ( 1, '1' )insert into @t values ( 2, '2' )select * from @t三、循环--while循环计算1到100的和declare @aintdeclare@sumintset@a=1set@sum=0while@a<=100beginset@sum+=@aset@a+=1endprint @sum四、条件语句--if,else条件分支if ( 1+1=2)beginprint ' 对'endelsebeginprint ' 错'end--when then条件分支declare @today intdeclare@weeknvarchar ( 3) set@today=3set@week=casewhen @today=1 then ' 星期一 ' when @today=2 then ' 星期二 ' when @today=3 then ' 星期三 ' when @today=4 then ' 星期四 ' when @today=5 then ' 星期五 'when @today=6 then ' 星期六 'when @today=7 then ' 星期日 'else ' 值错误 'endprint @week五、游标declare@ID intdeclare @Oidintdeclare @Login varchar ( 50)--定义一个游标declare user_cur cursor for select ID,Oid, [Login] from ST_User --打开游标open user_curwhile@@fetch_status =0begin--读取游标fetch next from user_cur into@ID, @Oid, @Loginprint @ID--print @Loginendclose user_cur--摧毁游标deallocate user_cur六、触发器触发器中的临时表:Inserted存放进行 insert和update操作后的数据Deleted存放进行 delete和update操作前的数据--创建触发器Create trigger User_OnUpdateOnST_Userfor UpdateAsdeclare@msgnvarchar ( 50)--@msg记录修改情况select @msg= N' 姓名从“' + + N' ”修改为“' + + ' ”' from Inserted,Deleted--插入日志表insert into[LOG](MSG)values ( @msg)--删除触发器drop trigger User_OnUpdate七、存储过程-- 创建带 output参数的存储过程CREATEPROCEDURE_Sum@aint ,@bint ,@sumint outputASBEGINset@sum=@a+@bEND--创建 Return 返回值存储过程CREATEPROCEDURE_Sum2@aint ,@bintASBEGINReturn@a+@bEND--执行存储过程获取 output 型返回值declare@mysumintexecute PR_Sum1, 2, @mysumoutput print @mysum-- 执行存储过程获取Return 型返回值declare@mysum2intexecute@mysum2= PR_Sum21, 2 print @mysum2八、自定义函数函数的分类:1)标量值函数2)表值函数a: 内联表值函数b: 多语句表值函数3)系统函数--新建标量值函数create function FUNC_Sum1 (@aint ,@bint)returns intasbeginreturn @a+@bend--新建内联表值函数create function FUNC_UserTab_1(@myIdint)returns tableasreturn ( select * from ST_User where ID <@myId) --新建多语句表值函数create function FUNC_UserTab_2(@myIdint)returns @t table([ID] [int]NOTNULL,[Oid] [int]NOTNULL,[Login] [nvarchar]( 50) NOTNULL,[Rtx] [nvarchar]( 4) NOTNULL,[Name] [nvarchar] ( 5)NOTNULL,[Password] [nvarchar] ( max)NULL,[State] [nvarchar] ( 8) NOTNULL)asbegininsert into @t select * from ST_User where ID <@myId returnend--调用表值函数select * from dbo.FUNC_UserTab_1(15)--调用标量值函数declare @sintset@s=dbo.FUNC_Sum100,( 50)print @s--删除标量值函数drop function FUNC_Sum1谈谈自定义函数与存储过程的区别:一、自定义函数:1.可以返回表变量2.限制颇多,包括·不能使用 output 参数 ;·不能用临时表 ;·函数内部的操作不能影响到外部环境;·不能通过 select返回结果集;·不能 update ,delete ,数据库表 ;3.必须 return 一个标量值或表变量自定义函数一般用在复用度高,功能简单单一,争对性强的地方。
SQL编程之SQL语⾔基础⼀、SQL语⾔基础1.1 常量与变量常量也称为⽂字值或标量值,是指程序运⾏中始终不变的量。
在 SQL 程序设计过程中,定义常量的格式取决于它所表⽰的值的数据类型。
常量类型常量表⽰说明字符串常量包括在单引号或双引号中,由字母(a~z,A~Z)、数字(0~9)、特殊符号组成。
⼗进制整型常量使⽤不带⼩数点的⼗进制数据表⽰。
⽰例:1234、321、+123、-123⼗六进制整型常量使⽤前缀0x后跟⼗六进制数字串表⽰。
⽇期常量使⽤单引号将⽇期时间字符串括起来。
MySQL是按年-⽉-⽇的顺序表⽰⽇期的。
中间分隔符可以⽤-,也可以⽤/、\、@、%等特征符号。
实型常量有定点表⽰和浮点表⽰两种⽅式。
⽰例:123.4、-123.4、19E24、-83E2位字段值使⽤b'value'符号写位字段值。
value是⼀个⽤0和1写成的⼆进制值。
例如:b'0'显⽰空⽩,b'1'显⽰⼀个笑脸图标。
⽰例:select bin(b'111101'+0),oct(b'111101'+0)布尔常量布尔常量只包含两个可能的值:TRUE和FALSE。
FALSE的数字值为0,TRUE的数字值为1。
NULL值 NULL可适⽤于各种列类型,它通常表⽰'没有值'、'⽆数据'等意义,并且不同于数字类型的0或字符串类型的空字符床。
变量就是在程序执⾏的过程中,其值是可变的。
在MySQL中,存在三种类型的变量:系统变量⽤户变量局部变量系统变量可以分为全局(global)变量和会话(session)变量两种。
1.1.1 全局变量和会话变量全局变量由MySQL启动时由服务器⾃动将它们初始化为默认值,这些默认值可以通过更改 my.ini ⽂件来更改。
会话变量在每次建⽴⼀个新的链接的时候,由MySQL来初始化。
MySQL会将当前所有全局变量的值复制⼀份作为会话变量。
实验名称:SQL基本语法(1)
实验目的:掌握T-SQL语法中的数据类型,变量的定义及赋值方法,表达式的类别及用法。
实验内容:
掌握数据类型的形式及功能
掌握局部变量的赋值及显示方式
掌握逻辑表达式的基本表达方式及应用
实验步骤
1.局部变量赋值及显示
DECLARE @v1 char(10) ,@v2 char(30)
SET @v1='中国'
SET @v2=@v1+'是一个伟大的国家'
SELECT @v2
GO
DECLARE @v1 int ,@v2 int
SET @v1=3.145
SET @v2=6.76
SELECT @v1+@v2
GO
DECLARE @v1 int ,@v2 char(3)
SET @v1=3.145
SET @v2=6
SELECT @v1+@v2
GO
创建一个名为sex的局部变量,并在SELECT语句中使用该局部变量查找学生表(STUDENT)中所有女同学的学号、姓名、性别*/
USE SCHOOL2
GO
DECLARE @sex CHAR(2)
SET @sex='W'
SELECT SNO, SNAME,SSEX
FROM STUDENT
WHERE SSEX=@sex
GO
/*使用查询语句为局部变量赋值*/
创建一个名为name的局部变量,并用SELECT语句中查找0001号学生的姓名,并将此姓名赋给NAME变量,显示出来。
GO
DECLARE @NAME char(8)
SET @NAME=(SELECT sname FROM student WHERE sno='0001')
SELECT @student
GO
/*使用SELECT语句为局部变量赋值*/
DECLARE @v1 char(4) ,@v2 char(20)
SELECT @v1 ='刘德华', @v2='是香港演员'
SELECT @v1+ @v2 AS 'NAME'
/*日期变量的赋值与运算*/
DECLARE @v1 DATETIME ,@v2 datetime
set @v1='01/01/2010' --日期型常量赋值时要用单引号
set @v2=@v1+100 --用减100验证结果
select @v2
GO
/* 将字符型数据转换成日期型,再进行运算*/
select CAST('2010-1-1' AS DATETIME)+100 AS '原日期加100后的日期'
-- CAST。
AS。
的功能是将指定的类型转换成AS后的类型
2.表达式应用
■算术运算
显示5被2除的余数结果
SELECT 5%2 AS'5被除的余数'
■关系运算
查询STUDENT表中所有男生
USE SHCHOOL2
GO
SELECT * FROM STUDENT
WHERE SSEX=‘F’
GO
■逻辑运算
查询学生表中计算机系的男生
USE SHCHOOL2
GO
SELECT * FROM STUDENT
WHERE DEPART=‘计算机’ AND SSEX=‘F’
GO
查询成绩表中课号为C01成绩大于80分的学生记录
SELECT * FROM SCORE WHERE DEGREE>90 ADN CNO="C01"
查询成绩表中成绩在80到100之间的学生记录
SELECT * FROM SCORE WHERE DEGREE BETWEEN 80 AND 100 或:传统表达式
查询计算机系与物理系的学生记录
SELECT * FROM STUDENT WHERE DEPART IN("计算机系","物理系")
或传统表达式:
查询学生表中姓名以“王”开头的学生名单情况。
SELECT *
FROM STUDENT WHERE SNAME LIKE ‘王%'
查询学生表中姓名以“王”或“张”开头的情况。
SELECT *
FROM STUDENT
WHERE SNAME LIKE ‘[王张]%'
■字符运算
将两个字符连接成一个新的字符串
SELEC T ('AAA'+'BBB') AS '两个字符串相加'
将学生表中的学号与姓名连接起来显示所有男生,标题为“学号及姓名”SELECT (学号+ ',' + 姓名) AS 学号及姓名
FROM STUDENT
WHERE SSEX=’F’。