专业问题,已经习惯了先问AI
下图是百度AI的回复
下图是讯飞星火的回复
下面是SQL SERVER 2022数据库引擎,查询使用!
报错:“*=”附近有语法错误。
查询数据库版本语法
SELECT @@VERSION
得到数据库版本:SQL Server 2022
下面是SQL SERVER 2008(含)以前的数据库引擎,查询使用!可以正常,没有任何报错!
但几家国内AI都说这是错误的SQL语法,所以只能自己验证!然后总结.....
/*下面通过部门,新进员工的场景来模拟*/
--如下:创建员工临时表
CREATE TABLE #user
(UserID VARCHAR(50),
UserName NVARCHAR(50),
DeptID INT)
--如下:将数据插入员工临时表
INSERT INTO #user VALUES ('GCS001',N'骚团长','10')
INSERT INTO #user VALUES ('GCS002',N'张三','10')
INSERT INTO #user VALUES ('GCS003',N'李四','20')
INSERT INTO #user VALUES ('GCS004',N'王五','30')
INSERT INTO #user VALUES ('GCS004',N'赵六','40')
INSERT INTO #user VALUES ('GCS004',N'杨七','50')
--如下:创建部门临时表
CREATE TABLE #dept
(DeptID VARCHAR (50),
DeptName NVARCHAR(50))
--如下:将数据插入部门临时表
INSERT INTO #dept VALUES ('10',N'IT部')
INSERT INTO #dept VALUES ('20',N'生产部')
INSERT INTO #dept VALUES ('30',N'工程部')
INSERT INTO #dept VALUES ('60',N'人事部')
INSERT INTO #dept VALUES ('70',N'采购部')
/*下面是SQL SERVER 2008(含)以前的写法,在之后版本就不能使用了!*/
SELECT * FROM #user A,#dept B WHERE A.DeptID=B.DeptID--对应下面INNER JOIN
SELECT * FROM #user A,#dept B WHERE A.DeptID*=B.DeptID--对应下面LEFT JOIN
SELECT * FROM #user A,#dept B WHERE A.DeptID=*B.DeptID--对应下面RIGHT JOIN
/*下面这种写法所有版本通吃*/
SELECT * FROM #user A INNER JOIN #dept B ON A.DeptID=B.DeptID--即有员工,又分了部门(最常用)
SELECT * FROM #user A LEFT JOIN #dept B ON A.DeptID=B.DeptID --有员工,但没有分部门,可以增加WHERE B.DeptID IS NULL来过滤
SELECT * FROM #user A RIGHT JOIN #dept B ON A.DeptID=B.DeptID--有部门,但没有进员工,可以增加WHERE A.UserID IS NULL来过滤
SELECT * FROM #user A FULL JOIN #dept B ON A.DeptID=B.DeptID--其实就是上面LEFT JOIN和RIGHT JOIN 通过UNION查询出来的数据,即包括上面两种数据
SELECT * FROM #user A CROSS JOIN #dept B --所有的组合都组一次,哪个表放左边,就用哪个表的数据和右边的表组(可以#dept A CROSS JOIN #user)来看,就直观了!
/* 这个语句仅限用于临时表!这个语句仅限用于临时表!这个语句仅限用于临时表!重要的事情说3遍!严重性,可自行百度!
即便临时表不用这个删除也没关系,因为临时表是存在数据库当前连接的会话中,关闭页面(即断开会话)表会自动删除!
DROP TABLE #user
DROP TABLE #dept
*/